最近在一个技术群里聊天,一个朋友遇到了问题:IIS没隔一段时间就反映迟钝,需要重启iis解决。
这种问题排查起来其实毫无头绪,我就借助以往开发运维经验猜测了一番:
1,询问阶段。通用话题,排查故障第一步
问:并发量多大?
答:站没多少访问,tcp连接数只有几十个,内部使用,总用户也最多二百人。
结论:与并发量高无关
问:服务器啥配置?
答:8核16G,物理机
结论:初步排除服务器配置不足原因
2,观察阶段。这一步需要索取更多服务器详细信息
资源使用什么情况?
内存:启动时候几十兆,运行到慢的时候,猛增至500M以上。
CPU:启动时候很小,忽略不计,当开始慢的时候,往往占用20%以上
网络:无明显流量波动
硬盘读写:队列长度很小,读写不明显
句柄数:几百,非常普通
线程数:几十,非常普通
3,推测阶段
由于该群友提过,突然变慢是启动一段时间后出现的,时机不确定,而且出问题时候,cpu,内存均有暴涨。
因此首先怀疑是资源泄漏(内存不回收,句柄不释放等等)。但是这种资源泄漏情况往往不是启动后很快出现。我曾经gps服务器程序泄漏句柄,连续1周之后,才出现句柄数高达百万的情况。因此这里不适用。
其次考虑,内存暴涨,这得有个说法,这个暴涨的内存是iis的进程,而不是数据库的进程,因此推测,可能做了一个大查询。类似于将整个表存入变量里的效果。才导致了内存存储数据,交换数据,占用较多的内存和临时cpu。于是重点顺着这个方向排查,果不其然,通过监控工具,发现执行了一个sql,查询返回了400万行数据。
安排开发人员优化后,连续运行两天,没有复现变慢的问题。基本认为问题解决!!
原文地址:
https://www.opengps.cn/Blog/View.aspx?id=158
文章的更新编辑依此链接为准。欢迎关注源站原创文章!