11.27 python腳本估算Java線程池參數配置

今天和大家分享一下如何得到理論上的線程池配置。用python寫一個小工具 estimate_configs 函數估算Java線程池參數配置:

python腳本估算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: \\n'
'tasks_per_sec: ', tasks_per_sec, '\\n'
'core_pool_size: ', core_pool_size, '\\n'
'queue_capacity: ', queue_capacity, '\\n'
'max_pool_size: ', max_pool_size, '\\n')

接口的qps可計算出tasks

最大容忍響應時間推算出等待時間

服務接口最大容忍響應時間 = 請求中任務最大等待時間 + 請求中任務最大執行時間

理論上,可以根據以上函數快速估計出一個項目所需線程池的配置。但是,如果這個時候CPU已100%滿載,那麼我們就要通過優化代碼、升級設備,降低每個任務的耗時來處理了~


分享到:


相關文章: