更新時間:2021-08-13 10:44:51 來源:動力節(jié)點 瀏覽1093次
眾所周知,Linux在默認(rèn)參數(shù)s下不能很好地支持高并發(fā),主要受單個進(jìn)程最大打開文件數(shù)s、內(nèi)核TCP參數(shù)和IO事件分配機(jī)制的限制。下面從幾個方面調(diào)整Linux系統(tǒng)支持高并發(fā)環(huán)境。
如果沒有,請關(guān)閉或卸載iptables防火墻并阻止內(nèi)核加載iptables模塊。這些模塊會影響并發(fā)性能。
每個進(jìn)程的最大打開文件數(shù)限制
在一般的發(fā)行版中,單個進(jìn)程最多可以打開1024個文件,遠(yuǎn)遠(yuǎn)不能滿足高并發(fā)的要求。調(diào)整過程如下:在?輸入,提示:
# ulimit –n 65535
設(shè)置root可以為單個進(jìn)程打開的最大文件數(shù)為65535。如果系統(tǒng)回顯類似“不允許操作”,則說明上述限制修改失敗。實際上, 中指定的值超出了 Linux 系統(tǒng)對用戶打開文件數(shù)的軟或硬限制。因此,有必要修改Linux系統(tǒng)對打開文件數(shù)的軟硬限制。
第一步是修改limits.conf文件并添加:
# vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
其中'*'表示修改了所有用戶的限制;soft or hard 指定是修改軟限制還是硬限制;65536 指定要修改的新限制值,即最大打開文件數(shù)(請注意軟限制值應(yīng)小于或等于硬限制)。修改后保存文件。
第二步:修改/etc/pam.d/login文件,在文件中加入如下一行:
# vim /etc/pam.d/login
sessionrequired /lib/security/pam_limits.so
這告訴Linux在用戶登錄后應(yīng)該調(diào)用PAM_limits.so模塊來設(shè)置用戶可以使用的資源數(shù)量的最大限制(包括用戶可以打開的最大文件數(shù)),以及PAM_limits。所以模塊會從 /etc/security/limits.conf 文件中讀取配置來設(shè)置這些限制。修改后保存此文件。
第三步:檢查Linux系統(tǒng)級別的最大打開文件數(shù)。使用以下命令:
# cat/proc/sys/fs/file-max
32568
這說明可以同時打開的最大文件數(shù)(包括所有用戶打開的文件總數(shù))為32568,這是Linux的系統(tǒng)級硬限制,也是所有用戶級打開的文件數(shù)限制文件不應(yīng)超過此值。
一般這個系統(tǒng)級硬限制是Linux系統(tǒng)啟動時根據(jù)系統(tǒng)硬件資源狀況計算出的同時打開文件的最佳最大數(shù)量。如果沒有特殊需要,則不應(yīng)修改此限制,除非您想為用戶級別打開文件限制設(shè)置一個超過此限制的值。改變這個硬限制的方法是修改 /etc/sysctl.conf 文件內(nèi)的 fs.file -Max = 131072,這是強(qiáng)制 Linux 在啟動后將系統(tǒng)級打開文件的硬限制設(shè)置為 131072。修改后保存此文件。
完成上述步驟后,重新啟動系統(tǒng)。一般情況下,您可以將Linux系統(tǒng)允許指定用戶的單個進(jìn)程同時打開的最大文件數(shù)設(shè)置為指定值。
如果使用 ulimit -n 命令檢查重啟后用戶可以打開的文件數(shù)限制仍然低于上述步驟中設(shè)置的最大值,這可能是因為使用了 ulimit -n 命令用戶登錄腳本 /etc/profile 限制了用戶可以同時打開的文件數(shù)量。
當(dāng)用戶可以同時打開的最大文件數(shù)被 ulimit -n 修改后,新修改的值只能小于或等于 ulimit -n 上次設(shè)置的值,因此無法增加使用此命令限制值。
因此,如果存在上述問題,只能打開/etc/profile腳本文件,查看文件中是否使用了ulimit -n來限制用戶可以同時打開的最大文件數(shù)。如果找到,則刪除該行命令或?qū)⑵湓O(shè)置值更改為適當(dāng)?shù)闹担缓蟊4嫖募S脩艨梢宰N并重新登錄系統(tǒng)。
通過以上步驟,對于支持高并發(fā)TCP連接處理的通信處理程序,解除了系統(tǒng)對打開文件數(shù)的限制。
在Linux系統(tǒng)下,TCP連接斷開后,在釋放端口之前,會保持一定的等待狀態(tài)。當(dāng)并發(fā)請求過多時,會產(chǎn)生大量的時間_等待狀態(tài)的連接如果不能及時斷開,會占用大量的端口資源和服務(wù)器資源。這時候我們可以優(yōu)化TCP內(nèi)核參數(shù)來設(shè)置time_等待狀態(tài)的端口被清除。
以上就是動力節(jié)點小編介紹的"Linux高并發(fā)服務(wù)器調(diào)優(yōu)",希望對大家有幫助,想了解更多可查看Java在線學(xué)習(xí)。動力節(jié)點在線學(xué)習(xí)教程,針對沒有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識,讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。