1 linux 預設 core file size 為 0
何謂 core 文件,當一個程式崩潰時,在進程目前工作目錄的 core 檔案中複製了該進程的儲存影像。 core 檔案只是一個記憶體映像(同時加上除錯資訊),主要是用來除錯的。 core 檔案是二進位文件,需要用對應的工具來分析程式崩潰時的記憶體映像。
系統預設 core 檔案的大小為 0 ,所以沒有建立。可以用 ulimit 指令來檢視和修改 core 檔的大小。
$ulimit -c
0
$ ulimit -c 1000
$ ulimit -c
1000
-c 指定修改 core 檔案的大小, 1000 指定了 core 檔案大小。也可以對 core 檔案的大小不做限制,如:
# ulimit -c unlimited
#ulimit -c
Unlimited
如果想讓修改永久生效,則需要修改設定檔
Vim /etc/profile 中的:
ulimit -S -c 0 > /dev/null 2>&1
修改為
ulimit -S -c 1000 > /dev/null 2>&1
參考資料: http://hi.baidu.com/jrckkyy/blog/item/2562320a5bdbc534b1351d95.html
2 linux 預設值 open files 和 max user processes 為 1024
#ulimit -n
1024
#ulimit –u
1024
問題描述: 說明 server 只允許同時開啟 1024 個文件,處理 1024 個使用者進程
使用ulimit -a 可以查看目前系統的所有限制值,使用ulimit -n 可以查看目前的最大開啟檔案數。
新裝的linux 預設只有1024 ,當作負載較大的伺服器時,很容易遇到error: too many open files 。因此,需要將其改大。
解決方法:
使用 ulimit –n 65535 可即時修改,但重啟後就無效了。 (註ulimit -SHn 65535 等效 ulimit -n 65535 ,-S 指soft ,-H 指hard)
有以下三種修改方式:
1. 在/etc/rc.local 中增加一行 ulimit -SHn 65535
2. 在/etc/profile 中增加一行 ulimit -SHn 65535
3. 在/etc/security/limits.conf 最後增加:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
具體使用哪一種,在 CentOS 中使用第1 種方式無效果,使用第3 種方式有效果,而在Debian 中使用第2 種有效果
# ulimit -n
65535
# ulimit -u
65535
備註:ulimit 指令本身就有分軟硬設置,加-H 就是硬,加-S 就是軟預設顯示的是軟限制
soft 限制指的是目前系統生效的設定值。 hard 限制值可以被一般使用者降低。但是不能增加。 soft 限制不能設定的比 hard 限制更高。 只有 root 使用者才能夠增加 hard 限制值。
3 發現有大量 TIME_WAIT 狀態的連接
問題描述: 發現大量 time_wait 狀態的連結 , 有時甚至達到 7000 以上
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'
查找較多 time_wait 連接
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
發現是 DB 伺服器的 mysql 和 memcache 的未釋放導致。
解決方法: 對於大量使用 tcp 連線的應用來說,也需要對 /etc/sysctl.conf 中的參數進行相應最佳化 :
vim /etc/sysctl.conf
編輯文件,加入以下內容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然後執行 /sbin/sysctl -p 讓參數生效。
優化後:
發現大量的 TIME_WAIT 已不存在, mysql 進程的佔用率很快就降下來的。
以上就介紹了nginx 伺服器系統最佳化,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。