我们有基于J2EE的web应用程序。在我们的生产环境中,我们间歇性地面临高CPU使用率(80-90%)。我们无法在QA环境中复制它。
生产环境:Windows 2012 Server(64位)、JDK 1.8(64位)
对于故障排除,我们采用了线程转储。它显示了总共215个线程。
111 threads are in WAITING status
34 threads are in RUNNABLE status
67 threads are in TIMED_WAITING status
3 threads are in BLOCKED status
我们如何找到哪些线程导致高CPU使用率?
2016-03-01 11:07:52全线程转储Java热点(TM)64位服务器虚拟机(25.5-b02混合模式):
“Thread-739969”-Threadt@807668JAVA朗。丝线。州:在爪哇等待。朗,反对。等待(本机方法)-等待
锁定的可拥有同步器:-无
“Thread-739968”-Threadt@807667JAVA朗。丝线。州:在爪哇等待。朗,反对。等待(本机方法)-等待
锁定的可拥有同步器:-无
“Thread-739963”-Threadt@807662JAVA朗。丝线。州:在爪哇等待。朗,反对。等待(本机方法)-等待
锁定的可拥有同步器:-无
“Thread-739962”-Threadt@807661JAVA朗。丝线。州:在爪哇等待。朗,反对。等待(本机方法)-等待
锁定的可拥有同步器:-无
“Thread-739960”-Threadt@807659JAVA朗。丝线。州:在爪哇等待。朗,反对。等待(本机方法)-等待
锁定的可拥有同步器:-无
“Thread-739959”-Threadt@807658JAVA朗。丝线。州:在爪哇等待。朗,反对。等待(本机方法)-等待
锁定的可拥有同步器:-无
"HttpShardExecort-3-thell-57429-处理-{core=action,副本=core_node1,ShardRequest.shards=s1.asite.com:8983//solr//actionscomments|s1r1.asite.com:8983//solr//actionscomments,node_name=10.120.112.31:8983_solr,shard=shd1,集合=action,ShardRequest.urlList=[超文本传输协议://<-超文本传输协议:////s1.asite.com:8983//solr//actionscomments ]}" - 线程t@807648java.lang.线程。State: RUNNABLE atjava.net.SocketInputStream.socketRead0(Native method)atjava.net.SocketInputStream.read(SocketInputStream.java:150)atjava.net.SocketInputStream.read(SocketInputStream.java:121)在org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:160)org. apache. http. implified. io。SocketInputBuffer. fillBuffer(SocketInputBuffer. java: 84)位于org. apache. http. implified. io。SocketInputBuffer. isData可用(SocketInputBuffer. java: 95)在org. apache. http. implified。AbstractHttpClientConnection. isStale(AbstractHttpClientConnection. java: 310)在org. apache. http. imp. conn。ManagedClientConnectionInp. isStale(ManagedClientConnectionInp. java: 158)在org. apache. http. imp. client.在org. apache. http. imp. client上执行(DefaultRequest estDirector. java: 433)。AbstractHttpClient. doExecute(AbstractHttpClient. java: 882)at org. apache. http. pp. client.执行(CloseableHttpClient. java: 82)在org. apache. http. imp. client.执行(CloseableHttpClient. java: 107)在org. apache. http. imp. client.在org. apache. solr. client. solrj. implified执行(CloseableHttpClient. java: 55)。在org. apache. solr. client. solrj. implified上的方法(HttpSolrClient. java: 466)。请求(HttpSolrClient. java: 235)在org. apache. solr. client. solrj. implified。请求(HttpSolrClient. java: 227)在org. apache. solr. client. solrj. implified。LBHttpSolrClient. doRequest(LBHttpSolrClient. java: 376)at org. apache. solr. client. solrj. implified。请求(LBHttpSolrClient. java: 328)在org. apache. solr. handler.组件。http://www. org. apache. solr. handler.组件。HttpShardHandler1美元。调用(HttpShardHandler. java: 221)在org. apache. solr. handler.组件。httpShardHandler1美元. call(HttpShardHandler. java: 183)在java. util. con电流。FutureWork. run(FutureTasks. java: 266)at java. util. con当前。执行器$RunnableAdapter. call(Executors. java: 511)在java. util. con当前。FutureTasks. run(FutureTasks. java: 266)在org. apache. solr. co. util。ExecutorUtil$MDCAware ThreadPoolExecutor1美元. run(ExecutorUtil. java: 148)在java. util. con电流。ThreadPoolExecutor. runWorker(ThreadPoolExecutor. java: 1142)在java. util. con当前。在java. lang上运行(ThreadPoolExecator. java: 617)。线程.运行(线程. java: 745)
锁定的可拥有同步器:-锁定(java.util.concurrent.ThreadPoolExecutor$Worker)
Process Explorer是调试windows性能问题的强大工具。它可以检查死锁线程或内存问题。
试试J控制台(TopThread插件)或visulavm(HotThread Detector插件),这些插件可以解释您正在寻找的内容。也检查这个问题。
使用visualvm识别占用CPU的线程。关于解释线程转储的一篇好文章可以在DZone上找到:如何分析java线程转储。
这应该允许你识别线程,也许你已经可以直接识别问题本身了。
问题内容: 关闭。 这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 7年前关闭。 最近,我的服务器CPU性能一直很高。 CPU平均负载为13.91(1分钟)11.72(5分钟)8.01(15分钟),而我的站点的流量仅略有增加。 运行完最高命令后,我看到MySQL使用的CPU是160%! 最近,我一直在优化表,并切换到持久连接。这会
初始设置 在创建并启动新的 Serene 应用程序之后,不能显示登录页,而当你打开浏览器控制台,却得到一条错误消息:找不到 Template.LoginPanel: 你可能使用了无效的解决方案名称,如 MyProject.Something (包含点’.’)。 当项目以这种方式命名时,模板系统将不能定位模板。 请不要在解决方案名称中使用点符号(’.’),如果必须使用点符号,可在创建解决方案之后再重
当使用 Gradle 时, 你肯定会碰到许多问题. 解决遇到的问题 如果你碰到了问题, 首先要确定你使用的是最新版本的 Gradle. 我们会经常发布新版本, 解决一些 bug 并加入新的功能. 所以你遇到的问题可能就在新版本里解决了. 如果你正在使用 Gradle Daemon, 先暂时关闭 daemon (你可以使用 switch —no-daemon 命令). 在第19章我们可以了解到更多关
在Debian和Ubuntu上,当您安装标准的FreeRADIUS软件包时,FreeRADIUS服务器二进制文件称为freeradius而不是radiusd。 您可以创建将使用较慢服务器的ldap模块的命名实例。 然后,您可以使用冗余部分替换authorize部分中的ldap条目,该冗余部分首先使用快速LDAP服务器列出模块,然后使用较慢的部分使用ldap模块实例。 #ldap redundant
Mount 5 Error mount 5 错误通常是 MDS 服务器滞后或崩溃导致的。要确保至少有一个 MDS 是启动且运行的,集群也要处于 active+healthy 状态。 Mount 12 Error mount 12 错误显示 cannot allocate memory ,常见于 Ceph 客户端和 Ceph 存储集群版本不匹配。用以下命令检查版本: ceph -v 如果 Ceph
从 Vert.x 3.4.0 开始,Vert.x 已经弃用 JGoups 实现,已经由 [infinispan]|(/clustering/Infinispan.md) 。不建议在生产或测试环境中使用 JGroups Cluster Manager 在构建工具中添加依赖即可: Maven(pom.xml) <dependency> <groupId>io.vertx</groupId> <