当时产品发现页面无法正常发送短信,点击就报错“out of memory ”,一看以为内存溢出,连上服务器 发现内存还有很多。
同时又发现xhell无法连接服务器。就解决 这个问题
[root@apps ~]# cat /var/log/secure
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)
参考:https://www.cnblogs.com/zangdalei/p/7693518.html 这个文档操作并没有解决问题。
后来查看每个进程占用的线程数量:
[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进程。恢复。
lsof -p PID # 查看打开什么文件,可以更好的定位问题