簡體   English   中英

java deadlock降低了性能

[英]java deadlock degrades performance

我們使用java7和tomcat7運行Web應用程序。 在我們的應用程序中,性能非常突然。 平均響應時間翻倍,在高峰時段,問題甚至變得更糟。

我們打印出一個線程轉儲,發現一個線程坐在那里等待一個條件。 我們做了幾個線程轉儲,這個線程的狀態從未改變過。

"logback-66215" daemon prio=10 tid=0x00007f86f4115800 nid=0x3758 waiting on condition [0x00007f868d817000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x00007f8ddf241fa8> (a java.util.concurrent.SynchronousQueue$TransferStack)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
        at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
        at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)
        at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:925)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

在線程轉儲中找不到此線程中的引用到0x00007f868d817000和0x00007f868d817000。

重新啟動tomcat后,線程消失了,性能就像應該的那樣。

我們在具有12個核心的服務器上運行它。 我們監控CPU使用率但沒有看到峰值。 當處於峰值負載時,由於大約500個請求/秒,CPU使用率確實上升到800%,但沒有進一步增加到1200%(這是最大值)。 當它達到800%時它停止增加,然后性能問題當然非常糟糕。

我不太了解線程,CPU,中斷的內部情況,以充分了解這種情況。 我真的想在更深層次上理解這個問題。

現在我的問題是:有人可以解釋一下,為什么這樣的僵局會造成這么多麻煩? 為什么它沒有顯示CPU使用率,所以我們看到一個滿載的CPU? 或者只是上下文切換的問題?

如果我錯了,請糾正我,但基於上面的線程轉儲,以及SynchronousQueue的存在,我猜你正在使用CachedThreadPoolExecutor( Executors.newCachedThreadPool() )來執行某些任務。

因此,轉儲將是其中一個緩存線程的轉儲,只需等待作業在線程池中入隊。 這里沒有錯,這不是死鎖 - 無論如何,真正的死鎖將在線程轉儲中明確地說明。

至於CPU消耗,處於WAITING狀態的線程不消耗任何CPU周期 - 它甚至沒有被安排執行。

那么,您的性能問題來自哪里?

很難說,但如果我是你,我會避免使用CachedThreadPool,因為它將努力創建執行作業所需的多個線程,即使它意味着吃掉所有服務器的內存(每個線程都為其保留內存)堆棧,至少100k)和CPU(如果有太多的線程需要管理,你的調度程序會變得瘋狂)。

您可能希望手動配置ThreadPoolExecutor(而不是使用Executors.new*工廠),以便能夠選擇最大線程數,隊列大小和類型,以及在大量作業即將到來的情況下的退避策略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM