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