zoukankan      html  css  js  c++  java
  • 记一次线上系统故障(文件句柄引起)

     当时产品发现页面无法正常发送短信,点击就报错“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  # 查看打开什么文件,可以更好的定位问题
  • 相关阅读:
    c内存结构
    Linux普通文件和设备的异同点
    二分查找在字符串中的应用范例
    快排的一种相当简单但不算最快的实现方式
    C程序的存储空间布局
    exit与_exit
    /proc文件系统
    Linux下监控磁盘空间的四个命令
    linux下监控进程需掌握的四个命令
    linux终端下文件不同颜色的含义
  • 原文地址:https://www.cnblogs.com/sheng-247/p/11215770.html
Copyright © 2011-2022 走看看