高并發(fā)情況下Linux系統(tǒng)參數(shù)優(yōu)化
眾所周知在默認(rèn)參數(shù)情況下Linux對(duì)高并發(fā)支持并不好,主要受限于單進(jìn)程最大打開(kāi)文件數(shù)限制、內(nèi)核TCP參數(shù)方面和IO事件分配機(jī)制等。下面就從幾方面來(lái)調(diào)整使Linux系統(tǒng)能夠支持高并發(fā)環(huán)境。
Iptables相關(guān)
如非必須,關(guān)掉或卸載iptables防火墻,并阻止kernel加載iptables模塊。這些模塊會(huì)影響并發(fā)性能。
單進(jìn)程最大打開(kāi)文件數(shù)限制
一般的發(fā)行版,限制單進(jìn)程最大可以打開(kāi)1024個(gè)文件,這是遠(yuǎn)遠(yuǎn)不能滿足高并發(fā)需求的,調(diào)整過(guò)程如下:
在#號(hào)提示符下敲入:
- # ulimit -n 65535
將root啟動(dòng)的單一進(jìn)程的最大可以打開(kāi)的文件數(shù)設(shè)置為65535個(gè)。如果系統(tǒng)回顯類(lèi)似于“Operationnotpermitted”之類(lèi)的話,說(shuō)明上述限制修改失敗,實(shí)際上是因?yàn)樵谥兄付ǖ臄?shù)值超過(guò)了Linux系統(tǒng)對(duì)該用戶打開(kāi)文件數(shù)的軟限制或硬限制。因此,就需要修改Linux系統(tǒng)對(duì)用戶的關(guān)于打開(kāi)文件數(shù)的軟限制和硬限制。
第一步,修改limits.conf文件,并添加:
- # vim /etc/security/limits.conf
- * soft nofile 65536
- * hard nofile 65536
其中'*'號(hào)表示修改所有用戶的限制;soft或hard指定要修改軟限制還是硬限制;65536則指定了想要修改的新的限制值,即最大打開(kāi)文件數(shù)(請(qǐng)注意軟限制值要小于或等于硬限制)。修改完后保存文件。
第二步,修改/etc/pam.d/login文件,在文件中添加如下行:
- # vim /etc/pam.d/login
- sessionrequired /lib/security/pam_limits.so
這是告訴Linux在用戶完成系統(tǒng)登錄后,應(yīng)該調(diào)用pam_limits.so模塊來(lái)設(shè)置系統(tǒng)對(duì)該用戶可使用的各種資源數(shù)量的最大限制(包括用戶可打開(kāi)的最大文件數(shù)限制),而pam_limits.so模塊就會(huì)從/etc/security/limits.conf文件中讀取配置來(lái)設(shè)置這些限制值。修改完后保存此文件。
第三步,查看Linux系統(tǒng)級(jí)的最大打開(kāi)文件數(shù)限制,使用如下命令:
- # cat/proc/sys/fs/file-max
- 32568
這表明這臺(tái)Linux系統(tǒng)最多允許同時(shí)打開(kāi)(即包含所有用戶打開(kāi)文件數(shù)總和)32568個(gè)文件,是Linux系統(tǒng)級(jí)硬限制,所有用戶級(jí)的打開(kāi)文件數(shù)限制都不應(yīng)超過(guò)這個(gè)數(shù)值。通常這個(gè)系統(tǒng)級(jí)硬限制是Linux系統(tǒng)在啟動(dòng)時(shí)根據(jù)系統(tǒng)硬件資源狀況計(jì)算出來(lái)的優(yōu)秀的最大同時(shí)打開(kāi)文件數(shù)限制,如果沒(méi)有特殊需要,不應(yīng)該修改此限制,除非想為用戶級(jí)打開(kāi)文件數(shù)限制設(shè)置超過(guò)此限制的值。修改此硬限制的方法是修改/etc/sysctl.conf文件內(nèi)fs.file-max= 131072
這是讓Linux在啟動(dòng)完成后強(qiáng)行將系統(tǒng)級(jí)打開(kāi)文件數(shù)硬限制設(shè)置為131072。修改完后保存此文件。
完成上述步驟后重啟系統(tǒng),一般情況下就可以將Linux系統(tǒng)對(duì)指定用戶的單一進(jìn)程允許同時(shí)打開(kāi)的最大文件數(shù)限制設(shè)為指定的數(shù)值。如果重啟后用ulimit-n命令查看用戶可打開(kāi)文件數(shù)限制仍然低于上述步驟中設(shè)置的最大值,這可能是因?yàn)樵谟脩舻卿浤_本/etc/profile中使用ulimit-n命令已經(jīng)將用戶可同時(shí)打開(kāi)的文件數(shù)做了限制。由于通過(guò)ulimit-n修改系統(tǒng)對(duì)用戶可同時(shí)打開(kāi)文件的最大數(shù)限制時(shí),新修改的值只能小于或等于上次ulimit-n設(shè)置的值,因此想用此命令增大這個(gè)限制值是不可能的。所以,如果有上述問(wèn)題存在,就只能去打開(kāi)/etc/profile腳本文件,在文件中查找是否使用了ulimit-n限制了用戶可同時(shí)打開(kāi)的最大文件數(shù)量,如果找到,則刪除這行命令,或者將其設(shè)置的值改為合適的值,然后保存文件,用戶退出并重新登錄系統(tǒng)即可。
通過(guò)上述步驟,就為支持高并發(fā)TCP連接處理的通訊處理程序解除關(guān)于打開(kāi)文件數(shù)量方面的系統(tǒng)限制。