最近,在服務器上搭建了一套壓測環境,不爲別的,就爲壓測下Nginx的性能,到底有沒有傳說中的那麼牛逼!具體環境爲:11臺虛擬機,所有安裝CentOS 6.8 64位操做系統,1檯安裝部署Nginx,其餘10臺做爲客戶端同時以壓滿CPU的線程向Nginx發送請求,對Nginx進行壓測。沒想到,出現問題了!!nginx
Nginx服務器訪問量很是高,在Nginx的錯誤日誌中不停的輸出以下錯誤信息。面試
2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files) 2020-07-23 02:53:49 [alert] 13576#0: accept() failed (24: Too many open files)
根據錯誤日誌的輸出信息,咱們能夠看出:是打開的文件句柄數太多了,致使Nginx報錯了!那咱們該如何解決這個問題呢?shell
既然咱們可以從Nginx的錯誤日誌中基本可以肯定致使問題的緣由,那這究竟是不是Nginx自己的問題呢?答案爲:是,也不全是!vim
爲啥呢?緣由很簡單:Nginx沒法打開那麼多的文件句柄,一方面是由於我沒有配置Nginx可以打開的最大文件數;另外一方面是由於CentOS 6.8操做系統自己對打開的最大文件句柄數有限制,我一樣沒有配置操做系統的最大文件句柄數。因此說,不全是Nginx的鍋!在某種意義上說,我錯怪Nginx了!設計模式
在CentOS 6.8服務器中,咱們能夠在命令行輸入以下命令來查看服務器默認配置的最大文件句柄數。bash
[root@binghe150 ~]# ulimit -n 1024
能夠看到,在CentOS 6.8服務器中,默認的最大文件句柄數爲1024。服務器
此時,當Nginx的鏈接數超過1024時,Nginx的錯誤日誌中就會輸出以下錯誤信息。微信
[alert] 13576#0: accept() failed (24: Too many open files)
那咱們該如何解決這個問題呢?其實,也很簡單,繼續往下看!session
使用以下命令能夠把打開文件句柄數設置的足夠大。併發
ulimit -n 655350
同時修改nginx.conf , 添加以下配置項。
worker_rlimit_nofile 655350;
注意:上述配置須要與error_log同級別。
這樣就能夠解決Nginx鏈接過多的問題,Nginx就能夠支持高併發(這裏須要配置Nginx)。
另外, ulimit -n
還會影響到MySQL的併發鏈接數。把它提升,也能夠提升MySQL的併發。
注意: 用 ulimit -n 655350
修改只對當前的shell有效,退出後失效。
若要令修改ulimits的數值永久生效,則必須修改配置文件,能夠給ulimit修改命令放入/etc/profile裏面,這個方法實在是不方便。
還有一個方法是修改/etc/security/limits.conf配置文件,以下所示。
vim /etc/security/limits.conf
在文件最後添加以下配置項。
* soft nofile 655360 * hard nofile 655360
保存並退出vim編輯器。
其中:星號表明全局, soft爲軟件,hard爲硬件,nofile爲這裏指可打開的文件句柄數。
最後,須要注意的是:要使 limits.conf 文件配置生效,必需要確保 pam_limits.so 文件被加入到啓動文件中。查看 /etc/pam.d/login 文件中是否存在以下配置。
session required /lib64/security/pam_limits.so
不存在,則須要添加上述配置項。
關注「 冰河技術 」微信公衆號,後臺回覆 「設計模式」 關鍵字領取《深刻淺出Java 23種設計模式》PDF文檔。回覆「Java8」關鍵字領取《Java8新特性教程》PDF文檔。
好了,今天就聊到這兒吧!別忘了點個贊,給個在看和轉發,讓更多的人看到,一塊兒學習,一塊兒進步!!
若是你以爲冰河寫的還不錯,請微信搜索並關注「 冰河技術 」微信公衆號,跟冰河學習高併發、分佈式、微服務、大數據、互聯網和雲原生技術,「 冰河技術 」微信公衆號更新了大量技術專題,每一篇技術文章乾貨滿滿!很多讀者已經經過閱讀「 冰河技術 」微信公衆號文章,吊打面試官,成功跳槽到大廠;也有很多讀者實現了技術上的飛躍,成爲公司的技術骨幹!若是你也想像他們同樣提高本身的能力,實現技術能力的飛躍,進大廠,升職加薪,那就關注「 冰河技術 」微信公衆號吧,天天更新超硬核技術乾貨,讓你對如何提高技術能力再也不迷茫!