【发布时间】:2018-03-26 11:46:59
【问题描述】:
我们有基于 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 HotSpot(TM) 64 位服务器 VM (25.5-b02混合模式):
"Thread-739969" - 线程 t@807668 java.lang.Thread.State: WAITING 在 java.lang.Object.wait(本机方法) - 等待 (一个 org.apache.solr.util.ConcurrentLRUCache$CleanupThread) 在 java.lang.Object.wait(Object.java:502) 在 org.apache.solr.util.ConcurrentLRUCache$CleanupThread.run(ConcurrentLRUCache.java:604)
锁定的可拥有同步器: - 无
"Thread-739968" - 线程 t@807667 java.lang.Thread.State: WAITING 在 java.lang.Object.wait(本机方法) - 等待 (一个 org.apache.solr.util.ConcurrentLRUCache$CleanupThread) 在 java.lang.Object.wait(Object.java:502) 在 org.apache.solr.util.ConcurrentLRUCache$CleanupThread.run(ConcurrentLRUCache.java:604)
锁定的可拥有同步器: - 无
"Thread-739963" - 线程 t@807662 java.lang.Thread.State: WAITING 在 java.lang.Object.wait(本机方法) - 等待 (一个 org.apache.solr.util.ConcurrentLRUCache$CleanupThread) 在 java.lang.Object.wait(Object.java:502) 在 org.apache.solr.util.ConcurrentLRUCache$CleanupThread.run(ConcurrentLRUCache.java:604)
锁定的可拥有同步器: - 无
"Thread-739962" - 线程 t@807661 java.lang.Thread.State: WAITING 在 java.lang.Object.wait(本机方法) - 等待 (一个 org.apache.solr.util.ConcurrentLRUCache$CleanupThread) 在 java.lang.Object.wait(Object.java:502) 在 org.apache.solr.util.ConcurrentLRUCache$CleanupThread.run(ConcurrentLRUCache.java:604)
锁定的可拥有同步器: - 无
"Thread-739960" - 线程 t@807659 java.lang.Thread.State: WAITING 在 java.lang.Object.wait(本机方法) - 等待 (一个 org.apache.solr.util.ConcurrentLRUCache$CleanupThread) 在 java.lang.Object.wait(Object.java:502) 在 org.apache.solr.util.ConcurrentLRUCache$CleanupThread.run(ConcurrentLRUCache.java:604)
锁定的可拥有同步器: - 无
"Thread-739959" - 线程 t@807658 java.lang.Thread.State: WAITING 在 java.lang.Object.wait(本机方法) - 等待 (一个 org.apache.solr.util.ConcurrentLRUCache$CleanupThread) 在 java.lang.Object.wait(Object.java:502) 在 org.apache.solr.util.ConcurrentLRUCache$CleanupThread.run(ConcurrentLRUCache.java:604)
锁定的可拥有同步器: - 无
"httpShardExecutor-3-thread-57429-processing-{core=actionscmets, 副本=core_node1, ShardRequest.shards=s1.asite.com:8983//solr//actionscmets|s1r1.asite.com:8983//solr//actionscmets, node_name=10.120.112.31:8983_solr,shard=shard1, 集合=actionscmets, ShardRequest.urlList=[http:////s1r1.asite.com:8983//solr//actionscomments, http:////s1.asite.com:8983//solr//actionscomments]}" - 线程 t@807648 java.lang.Thread.State:可运行于 java.net.SocketInputStream.socketRead0(本机方法)在 java.net.SocketInputStream.read(SocketInputStream.java:150) 在 java.net.SocketInputStream.read(SocketInputStream.java:121) 在 org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:160) 在 org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:84) 在 org.apache.http.impl.io.SocketInputBuffer.isDataAvailable(SocketInputBuffer.java:95) 在 org.apache.http.impl.AbstractHttpClientConnection.isStale(AbstractHttpClientConnection.java:310) 在 org.apache.http.impl.conn.ManagedClientConnectionImpl.isStale(ManagedClientConnectionImpl.java:158) 在 org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:433) 在 org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:882) 在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) 在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107) 在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55) 在 org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:466) 在 org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:235) 在 org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:227) 在 org.apache.solr.client.solrj.impl.LBHttpSolrClient.doRequest(LBHttpSolrClient.java:376) 在 org.apache.solr.client.solrj.impl.LBHttpSolrClient.request(LBHttpSolrClient.java:328) 在 org.apache.solr.handler.component.HttpShardHandlerFactory.makeLoadBalancedRequest(HttpShardHandlerFactory.java:246) 在 org.apache.solr.handler.component.HttpShardHandler$1.call(HttpShardHandler.java:221) 在 org.apache.solr.handler.component.HttpShardHandler$1.call(HttpShardHandler.java:183) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor$1.run(ExecutorUtil.java:148) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)
锁定的可拥有同步器: - 锁定(一个 java.util.concurrent.ThreadPoolExecutor$Worker)
【问题讨论】:
标签: java performance cpu