程序员在搭建服务器的时候会遇到很多的问题,有时服务器崩溃,有时候服务器达不到想要的处理效果。归根结底可能是对服务器所需的线程不是很了解。今天和大家分享一下如何得到理论上的服务器线程池配置。
python编写小工具 estimate_configs 函数估算Java线程池参数配置:
代码
# 估算Java线程池参数配置
def estimate_configs(temp_requests_per_sec, temp_tasks_per_request, temp_task_cost_per_task, temp_task_wait_time):
# 每秒任务数
temp_tasks_per_sec = temp_requests_per_sec * temp_tasks_per_request
# 核心线程数
temp_core_pool_size = temp_tasks_per_sec / (1 / temp_task_cost_per_task)
# 队列容量
temp_queue_capacity = (temp_core_pool_size / temp_task_cost_per_task) * temp_task_wait_time
# 最大线程数 (流量翻倍)
temp_max_pool_size = (2 * temp_tasks_per_sec - temp_queue_capacity) / (1 / temp_task_cost_per_task)return temp_tasks_per_sec, temp_core_pool_size, temp_queue_capacity, temp_max_pool_size
if __name__ == '__main__':
# 每秒请求数 (单位: 个)
requests_per_sec = 100
# 每个请求包含任务数 (单位: 个)
tasks_per_request = 10
# 每个任务花费的时间: task_cost_per_task (单位: s)
task_cost_per_task = 0.1
# 任务在队列中最大等待时间: task_wait_time (单位: s)
task_wait_time = 0.2
# 获取估算Java线程池配置
tasks_per_sec, core_pool_size, queue_capacity, max_pool_size = estimate_configs(requests_per_sec, tasks_per_request, task_cost_per_task, task_wait_time)
print('java thread configuration: '')
print('tasks_per_sec: ', tasks_per_sec)
print('core_pool_size: ', core_pool_size)
print('queue_capacity: ', queue_capacity)
print('max_pool_size: ', max_pool_size)
1. 接口的qps可计算出tasks
2. 最大容忍响应时间推算出等待时间
服务接口最大容忍响应时间 = 请求中任务最大等待时间 + 请求中任务最大执行时间
理论上,可以根据以上函数快速估计出一个项目所需线程池的配置。但是,如果这个时候CPU已100%满载,那么我们就要通过优化代码、升级设备,降低每个任务的耗时来处理了~
领取专属 10元无门槛券
私享最新 技术干货