Skip to content

Latest commit

 

History

History
49 lines (33 loc) · 1.94 KB

服务器异常案例.md

File metadata and controls

49 lines (33 loc) · 1.94 KB

###服务器异常案例


####1.某应用load>7,ssh感到输入命令后,要等待1、2秒 才开始执行

  • top命令查看cpu占用率,约70%,不至于导致ssh中命令响应变慢
  • tsar查看最近的网络流量,正常
  • iostat 1,发现(虚拟机)磁盘tps达到500+非常高
  • jstack观察java中一个线程频繁操作磁盘
  • lsof命令观察打开文件,并排查代码发现配置项有误导致磁盘上出现很多小的零碎文件,引发频繁的随机访问,修改配置项后问题解决 

####2.应用Load>10,GC正常,活跃线程数很多,CPU 100%

  • ps -efL, 显示所有活跃线程ID和对应时间
  • 根据对应线程SPID找出jstack中的执行栈
  • 定位到问题代码,发现一个没同步保护的HashMap频繁并发put/get导致死循环
注意:
通常cpu使用率达到了100%,一般是某些线程在某种条件下进入死循环,退不出来

####3.容灾演习之后服务无法启动

  • df –h 命令 /home 100%占用,日志文件巨大
  • 删掉由于断网引起的大量重连日志,重启

####4.某应用机器load狂飙100+,报警不断

  • 收集各个系统指标,发现除了load之外没有异常,load>进程数,应用响应正常
  • jstack中Runnable状态线程很多“at java.io.UnixFileSystem.getBooleanAttributes0(Native Method)”
  • ps –Tel 打印所有线程状态,发现大量怨妇进程(状态D,既无法中断又无法继续)
  • 根据僵尸进程ID再次查找jstack中对应代码,为blocked的文件访问栈
  • df命令hang住
  • 联系PE同学得知NAS故障,修复后重启OK

####5.Java进程健在,应用运行一段时间失去响应

  • jstat各个区域内存正常,应用服务器系统资源正常
  • 查看应用默认日志文件发现一行“WARN [common] 服务器 已停止运行:12201”
  • jstack发现有线程“JBoss Shutdown Hook”健在,查找代码发现居然有二方包代码在抛出异常后调用system.exit(0)