小談 accpet_mutex_delay 參數

之前發現nginx的進程在任務分配方面非常的不平均,即某個進程一旦忙起來會忙很久,而空閒的線程卻一直空閒,跟下代碼發現epoll_wait中默認的timer是500ms(沒有任務的情況下),可以通過減少accept_mutex_delay這個參數讓空閒的進程有更大的機會搶到accept鎖,從而使任務更加平均的分配,至於對效率的影響,需要測試才能知道。


worker process如果想要搶鎖,就必須從epoll_wait中醒過來纔可以走循環流程,然後走到搶鎖的地方纔有機會搶,而一旦worker process搶到了accept鎖,任務比較多的情況下,epoll_wait會被頻繁激活,導致搶鎖的機會大大增加,而空閒的進程500ms纔去嘗試一次搶accept鎖,所以請求量越大,空閒進程搶到鎖的可能性就越小.


搶鎖流程:

1、搶鎖

2、把listen fd加入epoll事件

3、解鎖(如果不解鎖,那其他進程永遠沒有機會再accept了)


accept_mutex_delay

含義:設置獲得互斥鎖的最少延遲時間。

語法:accpet_mutex_delay <number of millisecs>

缺省:500ms

示例:accpet_mutex_delay 1000ms;




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章