zoukankan      html  css  js  c++  java
  • 线程阻塞导致的性能问题分析

      近期一项目反馈,在月底时出现某功能反应异常卡顿的情况,总结规律为,只要某个耗时较长的大查询执行时,被影响的功能就不能正常使用。怀疑出现阻塞问题,先在数据库层面跟踪未发现阻塞等异常,跟踪被影响的功能,发现没有耗时较长的SQL,但是出现两个SQL之间时间间隔很长的情况。同时检查fiddler跟踪的webservices信息,发现有一个webs持续时间超长。推测可能为应用服务器出现线程阻塞。在问题重现时,抓取w3wp.exe进程dump。分析过程如下:

     先检查是否存在线程阻塞的情况,发现系统当前存在线程阻塞,其中阻塞源为94号线程

    根据Tess的解释:MonitorHeld shows 11. The owner has 1 and then each waiter has 2, so this means we have one owner and 5 waiters. We are synchronizing on a System.Object  and the owning thread is thread 94.

      检查线程状态

    发现如下96号线程在等待

    打印阻塞源94号线程

    查看96号线程堆栈信息,在CalculateEx()出现等待

    结合反编译代码,检查发现对应位置处锁定的粒度太大。。。

     

    https://blogs.msdn.microsoft.com/tess/2006/01/09/a-hang-scenario-locks-and-critical-sections/

  • 相关阅读:
    第二周教学设计反思
    uni-app,一套代码应用在多个平台
    新CMS
    学习js
    关于数据库
    自己写的一段jquery实现当滚动条滑动到某个位置实现向中间移动
    js平滑滚动到顶部、底部、指定地方
    统一一个帝国中搜索页面的模板
    帝国CMS的总结
    回到顶部的功能
  • 原文地址:https://www.cnblogs.com/wang-xiaohui/p/7102446.html
Copyright © 2011-2022 走看看