Nginx報錯: "Too many open files accept" 和 "could not build the server_names_hash"

 

                                                                                                                                                                 

1、訪問Nginx時,報錯:"accept() failed (24: Too many open files)"
緣由時:nginx的鏈接數超過了系統設定的最大值形成的.
處理辦法以下: mysql

[root@kvm-server nginx]# ulimit -n
1024
[root@kvm-server nginx]# ulimit -n 655360       #把打開文件數設置足夠大,這是臨時修改方案
[root@kvm-server nginx]# ulimit -n
655360

同時修改nginx.conf文件,添加下面內容,而後重啓nginx
worker_rlimit_nofile 655350;

這樣就能夠解決Nginx鏈接過多的問題,Nginx就能夠支持高併發。
另外, ulimit -n 還會影響到mysql 的併發鏈接數。提升文件鏈接數設置,也能提升mysql併發。

注意: 用ulimit -n 655360 修改只對當前的shell有效,退出後失效。因此,須要永久性修改
永久生效方法:
修改/etc/security/limits.conf,在文件底部添加:
* soft nofile 655360
* hard nofile 655360
星號表明全局, soft爲軟件,hard爲硬件,nofile爲這裏指可打開文件數。

另外,要使limits.conf文件配置生效,必需要確保 pam_limits.so 文件被加入到啓動文件中。
查看 /etc/pam.d/login 文件中有:
session required /lib/security/pam_limits.so

這樣,問題就迎刃而解了!

ulimit : 設置最大進程數和最大文件打開數, 這個通常是系統優化的必要手段.linux

1) 臨時修改
爲了優化linux性能,可能須要修改這個最大值。臨時修改的話ulimit -n 655360就能夠了,重啓後失效。
[root@localhost ~]# ulimit -n
1024
[root@localhost ~]# ulimit -n 655360
[root@localhost ~]# ulimit -n
655360

2) 永久修改
修改/etc/security/limits.conf文件, 在文件末尾添加
[root@localhost ~]# vim /etc/security/limits.conf

* soft nofile 655360
* hard nofile 655360
* soft nproc 655360
* hard nproc 655360

=============================
上面配置內容中:
*               表明針對全部用戶 
noproc     是表明最大進程數 
nofile      是表明最大文件打開數

如上修改後重啓服務或服務器,若是發現沒更改過來, 還須要修改下面梁文文件

在/etc/security/limits.d/90-nproc.conf文件末尾添加
[root@localhost ~]# vim /etc/security/limits.d/90-nproc.conf
* soft nproc 655360
* hard nproc 655360

在/etc/security/limits.d/def.conf文件末尾添加
[root@localhost ~]# vim /etc/security/limits.d/def.conf
* soft nofile 655360
* hard nofile 655360

而後重啓後生效

                                                                                                                                                               

2、重啓Nginx時, 出現報錯提示: "could not build the server_names_hash, you should increase server_names_hash_bucket_size: 64"nginx

解釋說明: 保存服務器名字的hash表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size所控制的。參數hash bucket size老是等於hash表的大小,而且是一路處理器緩存大小的倍數。在減小了在內存中的存取次數後,使在處理器中加速查找hash表鍵值成爲可能。若是 hash bucket size等於一路處理器緩存的大小,那麼在查找鍵的時候,最壞的狀況下在內存中查找的次數爲2。第一次是肯定存儲單元的地址,第二次是在存儲單元中查找鍵值。所以,若是Nginx給出須要增大 hash max size 或 hash bucket size的提示,那麼首要的是增大前一個參數的大小.sql

解決辦法:在nginx配置文件nginx.conf裏的http{}段增長一行配置"server_names_hash_bucket_size 64;" ,若是64還不夠,那麼就按32的倍數往上加,好比128或256或512。shell

相關文章
相關標籤/搜索