最近在 centos7 上搭建 nginx 作為 web 伺服器使用,但是使用過程中,nginx 總是莫名其妙的崩掉,使用命令dmesg
檢查錯誤資訊如下:
[6655217.659132] out of memory: kill process 11494 (lsof) score 10 or sacrifice child
[6655217.659567] killed process 11494 (lsof) total-vm:161160kb, anon-rss:42368kb, file-rss:0kb, shmem-rss:0kb
使用命令cat /var/log/nginx/error.log
來檢視 nginx 的錯誤日誌包含如下資訊:
2017/10/26 22:59:45 [crit] 13093#0: accept4() failed (23: too many open files in system)
2017/10/26 22:59:45 [crit] 13092#0: accept4() failed (23: too many open files in system)
經過高人指點,是系統配置設定沒法滿足當前的使用量,準確點說是系統的 open files (開啟檔案數目)配置的太低了。
使用命令ulimit -a
看一下當前置:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15089
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
posix message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 15089
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
可以看到 open files 值,只有 1024,下面我們就詳細說一下如何在 centos 系統級別提高開啟檔案數目(open files)的限制。
詳細步驟:
使用命令sudo bash
切換到 root 賬戶;
使用 vi/vim 編輯/etc/sysctl.conf
增加一行fs.file-max = 100000
,下面是修改後的結果:
[root@test /]# cat /etc/sysctl.conf
# system default settings live in /usr/lib/sysctl.d/00-system.conf.
# to override those settings, enter new settings here, or in an /etc/sysctl.d/.conf file
## for more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv4.tcp_challenge_ack_limit = 999999999
kernel.kptr_restrict = 1
fs.file-max = 100000
使用 vi/vim 編輯/etc/security/limits.conf
,並在末尾增加如下語句,用來增加所有使用者的軟硬控制代碼和檔案開啟數目限制:
* soft nofile 100000
* hard nofile 300000
下面是修改後的結果:
[root@test /]# cat /etc/security/limits.conf
# 省略的內容
# end of file
* soft nofile 100000
* hard nofile 300000
執行命令sysctl -p
讓修改生效;
通過命令whereis nginx
檢視 nginx 配置檔案所在位置:
[root@test /]# whereis nginx
nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man3/nginx.3pm.gz /usr/share/man/man8/nginx.8.gz
[root@test /]# cat /etc/nginx/nginx.conf
# 省略的內容
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
worker_rlimit_nofile 300000;
# 省略的內容
使用reboot
命令重啟系統後,我們分別使用ulimit -hn
、ulimit -sn
和ulimit -a
來檢視修改後的效果:
[root@test /]# ulimit -hn
300000
[root@test /]# ulimit -sn
100000
[root@test /]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15089
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 100000
pipe size (512 bytes, -p) 8
posix message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 15089
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
上述示例的設定值均是對公共伺服器的配置,具體資料請根據系統實際需要進行設定;
如果上述方法仍然沒有解決問題,可以考慮:
1.使用服務的方式啟動 nginx 試試;參考文章:2.加配置記憶體。
Vs2010 崩潰(虛擬記憶體不足)
當 visual studio 崩潰並且虛擬記憶體不足時,會顯示此訊息。但是,這並不意味著系統中的虛擬記憶體不足,而是 visual studio 將用盡位址空間。此錯誤通常出現在具有 32 位作業系統的計算機上,這些作業系統會將 visual studio 的位址空間限制為 2gb。在 64 位系...
Winform 記憶體不足
winform 記憶體不足 winform,我給picturebox 賦值 picbox one.backgroundimage image.fromfile 解決方案 picbox one.backgroundimage 每賦值一次,都要把上一次的拉出來釋放掉 c codeif picbox on...
linux 記憶體不足
在linux下增加臨時swap空間 sudo dd if dev zero of home swap bs 64m count 16注釋 of home swap,放置swap的空間。count的大小就是增加的 swap 空間的大小,64m 就是塊大小,這裡是 64mb,所以總共空間就是bs cou...