###服务器异常案例
####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)