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