2010-08-24 46 views
8

我剛剛開始研究有一些CPU問題的龍捲風應用程序。 CPU時間會隨着時間的推移而單調增長,最大限度地提高CPU的100%。系統目前設計爲不阻塞主線程。如果它需要做一些阻塞操作並且異步驅動程序不可用,它會產生另一個線程來執行阻塞操作。如何確定適當的檢查間隔?

因此,我們的主線程幾乎完全受到CPU限制,並且一些其他線程幾乎都是IO限制的。從我讀過的內容來看,這似乎是解決GIL問題的最佳方式。另外,我的分析表明,我們花了很多時間等待信號(我假設它是__semwait_signal正在做的),這與GIL在我有限的理解中的影響是一致的。

如果我使用sys.setcheckinterval將檢查間隔設置爲300,則CPU增長速度顯着下降。我試圖確定的是,我應該增加檢查間隔時間,將其保持在300,還是應該加大檢查間隔。畢竟,我注意到CPU性能變好了,但我有點擔心這會對系統的響應性產生負面影響。

當然,正確的答案可能是我們需要重新考慮我們的架構來考慮GIL。但這不是馬上就能做到的。那麼如何確定短期採取的適當行動?

回答

1

我會檢查的第一件事是確保您正確退出線程。很難弄清楚你的描述是怎麼回事,但是你使用「單調」這個詞,這意味着CPU的使用與時間而不是加載有關。

你可能會碰到Python的線程限制,但它應該隨着負載(活動線程的數量)而變化,CPU使用率(上下文切換成本)應該隨着這些線程的退出而降低。線程一旦創建就有一定的理由永生?如果是這種情況,請優先考慮重新架構。否則,短期內會弄清楚爲什麼CPU使用率與時間相關而不是負載。這意味着每個新線程在系統中都有永久的,不可逆轉的成本 - 意味着它永遠不會退出。

+0

我確信線程正常退出。另外,我看到負載下的性能差異。只是負載導致CPU時間增長得更快。 – 2010-08-29 16:59:03

相關問題