故障排除案例:避免大量查询存入变量!

[软件开发] 季雨林 2018/8/10 9:24:23

        最近在一个技术群里聊天,一个朋友遇到了问题: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 文章的更新编辑依此链接为准。欢迎关注源站原创文章!
文末推荐: 阿里云代金券礼包,感谢领取支持本文!!

暂不开启留言板块

鲁ICP备14008001号-2