記一次線上系統故障(文件句柄引發)

 當時產品發現頁面沒法正常發送短信,點擊就報錯「out of memory 」,一看覺得內存溢出,連上服務器 發現內存還有不少。html

同時又發現xhell沒法鏈接服務器。就解決 這個問題 java

[root@apps ~]#  cat /var/log/securepython

Jul 19 21:16:22 apps sshd[17349]: pam_unix(sshd:session): session closed for user jgw
Jul 19 21:17:53 apps sshd[21807]: Accepted password for jgw from 61.164.59.252 port 6452 ssh2
Jul 19 21:17:53 apps sshd[21807]: pam_unix(sshd:session): session opened for user jgw by (uid=0)
Jul 19 21:18:06 apps sshd[21836]: Accepted password for jgw from 61.164.59.252 port 6453 ssh2
Jul 19 21:18:06 apps sshd[21836]: pam_unix(sshd:session): session opened for user jgw by (uid=0)
Jul 19 21:18:18 apps su: pam_unix(su-l:session): session opened for user root by jgw(uid=1000)

 參考:http://www.javashuo.com/article/p-qsuausuq-bz.html 這個文檔操做並無解決問題。redis

後來查看每一個進程佔用的線程數量:bash

[jgw@redis01 logs]$ ps -ef|grep java|awk '{print "lsof -p "$2" | wc -l"}'|bash  #每一個進程的線程數量
116
76
127
0
128
111
124
147
88
236
153
77
310
141
97
299
113

其中發現有個進程的數量上千,就找出此進程,查看線程:服務器

[jgw@redis01 logs]$ ps -T -p 10214     #在ps命令中,「-T」選項能夠開啓線程查看。下面的命令列出了由進程號爲<pid>的進程建立的全部線程。
  PID  SPID TTY          TIME CMD
10214 10214 ?        00:00:00 java
10214 10216 ?        00:00:23 java
10214 10217 ?        00:00:00 java
10214 10218 ?        00:00:00 java
10214 10219 ?        00:00:00 java
10214 10220 ?        00:00:00 java
10214 10221 ?        00:00:00 java
10214 10223 ?        00:00:00 java
10214 10224 ?        00:00:00 java
10214 10225 ?        00:00:00 java
10214 10226 ?        00:00:36 java
10214 10228 ?        00:00:36 java
10214 10229 ?        00:00:08 java
10214 10230 ?        00:00:00 java

用了此命令後發現是ms-code進程鏈接了1000多個redis線程。就殺掉ms-code進程。恢復。session

相關文章
相關標籤/搜索