###服务器异常案例

---

####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)

￼￼￼
