1. 程式人生 > >記一次ss程序莫名其妙掛掉排查

記一次ss程序莫名其妙掛掉排查

情況是這樣的,我這邊辦公環境是已經科學上網了,也就是在路由器裡面配置了ss,大概有20臺電腦同時在這個路由器下面,辦公上網。斷網情況是在中午發生的,就是莫名其妙的斷網了,根據經驗猜是不是ss程序掛了,路由器連不上了,就斷網了。登上伺服器一看,果然程序沒了,啟動後並沒多想。可能是人多了 一個程序扛不住了?為了不影響大家的工作,先寫個指令碼來監控吧,如果掛掉了,立即啟動,5秒判斷一次,指令碼很簡單。死迴圈放到後臺即可。

 1 #!/bin/bash
 2 
 3 while true;
 4 do
 5     num=$(ps axu | grep "ssserver" | grep -v "grep
" | wc -l) 6 time=$(date "+%Y-%m-%d %H:%M:%S") 7 if [ $num -eq 0 ];then 8 /usr/bin/ssserver -c /etc/shadowsocks.json -d start 9 echo "$time restart" >> /tmp/ss.log 10 11 fi 12 13 sleep 5 14 done

然後,又過了兩個小時,又斷網了一次。。。握草。這次要徹底排查一下問題了,根據指令碼記錄是在這個時間重啟的。

那就先看一下ss的日誌,找到對應時間看發生了啥。。日誌是 /var/log/shadowsocks.log

果然是有一個錯誤,/dev/urandom (or equivalent) not found    導致了程序掛掉,由於我的指令碼的問題,所以幾秒後又啟動了。開始谷歌搜這個錯誤。。。找了一大圈,貌似沒啥解決方法,就看到了下面這個東西,感覺可能是這個問題。。。

 Too many open files 打開了太多的檔案,看到這個 我想到了程序開啟的檔案控制代碼數量,那就繼續排查

lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more

  以開啟檔案控制代碼書排序,第一列是控制代碼數 第二列是程序PID

排行第一的21643程序打開了668個 那就看下這個程序是誰,不出意外就是ssserver 也就是ss的服務端程序

果然如此,是ss的程序,首先這已經是重啟了之後的,我就馬上開始排查問題的,就已經打開了668個了,linux程序預設開啟控制代碼數量是1024

[[email protected] ~]# ulimit -n
1024

很有可能剛才掛掉的時候,已經超過了這個值了,就導致出錯了。那麼 就先修改下數量,觀察幾個小時 看是不是真的是這個原因導致的。

修改檔案控制代碼最大限制,我這裡是centos7

vi /etc/systemd/system.conf
    DefaultLimitCORE=infinity
    DefaultLimitNOFILE=1024000
    DefaultLimitNPROC=1024000

重啟才能生效。

這樣應該就沒啥問題了,所以來寫一下記錄下來,方便你我他,嘿嘿~~~ ,這種事情 不知道會不會有人遇到,要是萬一碰到了呢。。。

再見~~