2010-06-28 154 views
2

我正试图找到多线程服务的瓶颈。我使用-c 100的ab,并在350左右观察TPS。问题是最高CPU使用率是70%,内存是10%。所以它看起来不是CPU或内存限制。它不是在做磁盘或网络I/O。我如何确定瓶颈是什么?如何找到多线程服务中的瓶颈?

+0

你可以添加一些关于这个过程的细节吗?你说没有磁盘或网络I/O这个事实似乎有点偏离。 – ChaosPandion 2010-06-28 19:34:09

+0

基本上,服务会产生6个线程(使用ExecutorSevice池)为每个传入请求从缓存中执行6次读取。我正在使用ehcache,只能访问4个资源。我证实除第一次通过外,所有访问都是缓存命中。资源非常小,最大5kb。我使用JProfiler,看到90%的时间花在sun.misc.unsafe.park上,另外10%是我的方法。我应该如何解释这个/进一步调试? – extraeee 2010-06-29 05:38:50

回答

1

你有死亡线程在等待对方完成?你有线程在等待数据库锁吗?等待线程通常可能是系统看起来放慢或等待的瓶颈,但您不会总是看到资源消耗。

+0

@Chis Aldrich - cseric如何找到这些线程? – MaasSql 2010-06-28 19:38:46

+0

@MaasSql - 我知道这很荒谬,但VS2010探查器有一些很棒的功能,可以帮助你找到死锁。 – ChaosPandion 2010-06-28 19:46:07

+0

由于ChaosPandion指出您需要使用一个分析器(或可能会显示线程的代码调试器)。但是剖析器是最好的选择。不知道使用什么系统或使用哪种语言,推荐使用Profiler工具更为困难。在我的公司,我们倾向于坚持使用Java和IBM堆栈产品,因此我们坚持使用IBM分析器。希望这有帮助。 – 2010-06-28 19:58:56