线程阻塞导致的性能问题分析

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

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

检查线程状态

发现如下96号线程在等待

打印阻塞源94号线程

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

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

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

时间: 2024-11-14 12:35:00

线程阻塞导致的性能问题分析的相关文章

【性能诊断】七、并发场景的性能分析(windbg案例,线程阻塞)

简单整理一个测试Demo,抓取dump并验证,步骤如下: Symbol File Path:SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols Procdump每20秒抓取一次,连续抓三个:procdump -ma -s 20 -n 3 TestCPU.exe Ctrl + D 打开刚才收集的dump文件: 加载sos,命令:.loadby sos clr 检查所有线程的堆栈:~* e!clrstack 查看线程阻塞:!syncbl

频繁分配释放内存导致的性能问题的分析

频繁分配释放内存导致的性能问题的分析 现象 1 压力测试过程中,发现被测对象性能不够理想,具体表现为: 进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70 2 用ps -o majflt,minflt -C program命令查看,发现majflt每秒增量为0,而minflt每秒增量大于10000. 初步分析 majflt代表major fault,中文名叫大错误,minflt代表minor fault,中文名叫小错误. 这两个数值表示一个进程自启动以来所发生的缺页中断的次数

(转)netty、mina性能对比分析

转自: http://blog.csdn.net/mindfloating/article/details/8622930 流行 NIO Framework netty 和 mina 性能测评与分析 测试方法 采用 mina 和 netty 各实现一个 基于 nio 的EchoServer,测试在不同大小网络报文下的性能表现 测试环境 客户端-服务端: model name: Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz cache size: 6144 KB

单线程你别阻塞,Redis时延问题分析及应对

单线程你别阻塞,Redis时延问题分析及应对 Redis的事件循环在一个线程中处理,作为一个单线程程序,重要的是要保证事件处理的时延短,这样,事件循环中的后续任务才不会阻塞: 当redis的数据量达到一定级别后(比如20G),阻塞操作对性能的影响尤为严重: 下面我们总结下在redis中有哪些耗时的场景及应对方法: 耗时长的命令造成阻塞 keys.sort等命令 keys命令用于查找所有符合给定模式 pattern 的 key,时间复杂度为O(N), N 为数据库中 key 的数量.当数据库中的个

关于redis性能问题分析和优化

一.如何查看Redis性能 info命令输出的数据可分为10个分类,分别是: server,clients,memory,persistence,stats,replication,cpu,commandstats,cluster,keyspace 为了快速定位并解决性能问题,这里选择5个关键性的数据指标,它包含了大多数人在使用Redis上会经常碰到的性能问题 二.内存 上图中used_memory 字段数据表示的是:由Redis分配器分配的内存总量,以字节(byte)为单位. 其中used_m

性能缺陷分析及定位方法

性能测试缺陷 一般有以下两种情况: 不能满足既定的性能指标,如:响应时间.资源耗用等: 并发错误.死锁.内存泄漏 性能缺陷分类 资源忙不来 资源怠工 性能缺陷分析 从下到上剥洋葱的方法,逆向请求分析. 从硬件--操作系统--数据库--中间件--后端应用程序--前端应用程序 实例1 银行应用系统:linux服务器,语言:java,应用服务器:weblogic,数据库:oracle,为了加强安全和稳定增加了流量控制功能(当请求量突然大量爆发,流量控制最大的并发流量,拦截其他流量). 测试策略: 基本

<转>Android App性能评测分析-流畅度篇

1.前言 在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多.一些下拉上滑.双指缩放快速打字等操作,安卓的流畅度都表现比较糟糕,但是,对于App使用过程是否流畅,一直没有一个可靠的指标将用户的客观感受和数据一一对应.虽然之前有FPS(每秒帧数)作为游戏或视频类App的性能指标,但对于那些界面更新不多的App来说,仍不是一个合适的衡量数据.以下会根据实际app性能测试案例,展开进行app性能

性能测试之性能问题分析

开始性能测试前需要了解的内容: 1.项目具体需求. 2.指标:响应时间在多少以内,并发数多少,tps多少,总tps多少,稳定性交易总量多少,事务成功率,交易波动范围,稳定运行时长,资源利用率,测哪些交易,哪些接口,测试哪些场景. 3.环境:生产环境服务器数量,测试环境服务器数量,按照资源配比得出测试指标. 4.协议:系统用什么协议进行通讯. 5.压力机数量:如果并发用户数太多,需要把压力发到不同的压力机,不然可能会存在压力机瓶颈问题,导致tps和响应时间抖动. 6.交易占比:分析线上日志得出tp

批量线程阻塞

17在3月6号有失败情况.19,20都停了.10,2也都停了. 2017年3月17日00:29:32分析可能是BatchRunner类里的monitor崩溃了.现象是:批量机的调度程序,是正常的,并且一直到时启动.但是批量并未执行.而非批量机却由于有core的日切调用,会有一条数据.(隔一天有一条,是由于负载的原因)猜想是runBatch在执行17的队列时,遇到某种错误,导致线程挂掉了.但是runBatch又捕捉了Throwable,理论上来说,所有异常错误都会捕捉到的. 或者runBatch没