服务器问题排查总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gohuge/article/details/80010125
问题表现
普遍现象为服务器卡顿,无法进入服务器,场景卡住无响应,问题产生的原因大概有:

1、CPU飚高
通常是密集型调度产生,通过各种语言提供的性能分析工具,top出问题进程;
在找到该进程当前栈的调度者即可。

Java可以通过打印当前系统线程,的方式直接定位各个线程的栈停在什么位置;
Erlang可以通过etop找出调度高的进程,在通过eprof找出改进程当前执行的函数是什么;
Golang可以通过pprof直接获得当前程序的栈调度排序。

2、内存飚高
可能存在对象一直开辟,没有回收的情况,或者消息队列处理成等待状态,需要找到
内存高的进程,检查其消息队列,分析内存形态(堆还是栈),堆内存一眼即可看出
什么泄漏,栈开销过大,就需要检查重度函数了。

Java通常打印 OutOfMemoryError,直接定位;或者通过 jstat 分析gc和各个对象所处的情况
Erlang会输出overflow日志定位,也可通过process或erlang:memory查询情况,etop也可能找出占用
内存较高的进程。

3、IO高
IO高,可能存在通信延迟,磁盘写入等待过长等问题,可通过iostat确认,检查通信和IO操作的部分。
这部分通常要么数据库出现问题,要么网络被攻击了,要么发送数据过大,(文件操作排除)

通过服务器zabbix监控程序检查对应时间点的网络/磁盘 IO可确认时间点。

4、上述都正常
需要检查机房网络问题,片区网络,从环境上考虑。

逻辑问题
1、先确认数据和状态、数据是否正确,状态是否正常(因为这两者具有感染性);
2、如果数据和状态都正常,那很简单就是逻辑顺序或者逻辑判定问题;
3、如果数据和状态异常,那么需要列出改变数据和状态的感染源,从每个源头分析
是否造成数据异常。

猜你喜欢

转载自blog.csdn.net/gohuge/article/details/80010125