2016-03-02 128 views
0

我们有基于J2EE的Web应用程序。我们间歇性地面临着我们的生产环境中高CPU使用率(80-90%)。 我们无法在我们的QA环境中复制它。排除Windows服务器CPU占用率过高的问题

生产环境:Windows 2012服务器(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年3月1日11时07分52秒全部线程转储的HotSpot的Java(TM)64位服务器VM (25.5-B02混合模式):

“主题-739969“ - 线程t @ 807668 java.lang.Thread.State:正在等待 at java.lang.Object.wait(本地方法) - 等待< 229fc226>(a org.apache.solr.util.ConcurrentLRUCache $ CleanupThread )at java.lang.Object.wait(Object.java:502)at org.apache.solr.util.ConcurrentLRUCache $ CleanupThread .RUN(ConcurrentLRUCache.java:604)

锁定的可拥有同步: - 无

“线程739968” - 线程t @ 807667 java.lang.Thread.State中:在java.lang.Object中WAITING .wait(Native Method) - 等待< 5a578345>(org.apache.solr.util.ConcurrentLRUCache $ CleanupThread)at java.lang.Object.wait(Object.java:502)at org.apache.solr .util.ConcurrentLRUCache $ CleanupThread.run(ConcurrentLRUCache.java:604)

锁定的拥有同步器: - 无

“线程739963” - 线程t @ 807662 java.lang.Thread.State中:在java.lang.Object.wait(本机方法) WAITING - 等待< 20851ef7>(一个组织。 apache.solr.util.ConcurrentLRUCache $ CleanupThread)在 java.lang.Object.wait(Object.java:502)在 org.apache.solr.util.ConcurrentLRUCache $ CleanupThread.run(ConcurrentLRUCache.java:604)

锁定的可拥有同步: - 无

“线程739962” - 线程t @ 807661 java.lang.Thread.State中:等候java.lang.Object.wait(Object.java:502) - java.lang.Object.wait上的(Native Method) - 等待< 35061b89>(a org.apache.solr.util.ConcurrentLRUCache $ CleanupThread) java.lang.Object.wait在 org.apache.solr.util.ConcurrentLRUCache $ CleanupThread.run(ConcurrentLRUCache.java:604)

锁定的可拥有同步: - 无

“线程739960” - 线程t @ 807659 java.lang中.Thread.State:等待 在java.lang.Object.wait(本地方法) - 等待< 3491a931>(一个org.apache.solr.util。ConcurrentLRUCache $ CleanupThread)在 java.lang.Object.wait(Object.java:502)在 org.apache.solr.util.ConcurrentLRUCache $ CleanupThread.run(ConcurrentLRUCache.java:604)

锁定的可拥有同步: - 无

“线程739959” - 线程t @ 807658 java.lang.Thread.State中:在java.lang.Object.wait(本机方法) WAITING - 等待< 6395c27d>(一个组织。 apache.solr.util.ConcurrentLRUCache $ CleanupThread) org.apache.solr.util.ConcurrentLRUCache java.lang.Object.wait(Object.java:502) $ CleanupThread.run(Concurrent LRUCache.java:604)

锁定拥有同步器: - 没有

“httpShardExecutor -3-线程57429-处理 - {核心= actionscomments, 复制品= 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 = shard1, collection = actionscomments, ShardRequest.urlList = [http:////s1r1.asite.com:8983//solr//actionscommentshttp:////s1.asite.com:8983//solr//actionscomments]}“ - 线程t @ 807648 java.lang.Thread.State:RUNNABLE在 java.net.SocketInputStream.socketRead0(Native Method)at java.net.SocketInputStream.read(SocketInputStream.java:150)at java.net.SocketInputStream.read(SocketInputStream.java:121)at 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(ManagedClientConnectionIm pl.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) 在 组织。 apache.solr.handler.component。HttpShardHandler $ 1.call(HttpShardHandler.java:183) at java.util.concurrent.FutureTask.run(FutureTask.java:266)at 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 $工人)

回答

0

尝试Jconsole(TopThread插件)或visulavm(HotThread探测器插件),这些插件解释你在找什么。检查this的问题也。