我有一個使用 的 python 程序multiprocessing.Pool
,這意味著它會產生多個進程。該程式會取得 70k 文字文件,進行一些處理,並將它們儲存到另一個目錄。我想在運行時利用所有 CPU 核心,例如這。
有一段時間,我已經能夠做到了。我的程式每次運行大約需要 10 秒,這很好。
real 0m12.430s
user 0m13.072s
sys 0m9.704s
但最近幾天,情況卻不太穩定。有時它會為所有核心使用 100% CPU。其他時候,程式無緣無故只使用了0-1%,運行時間長達5分鐘。
real 5m6.186s
user 0m4.844s
sys 0m4.968s
請注意,real >> user + sys,儘管我不知道這意味著什麼。另請注意,我不會在運行之間更改程式碼的任何參數或任何其他設定。在這種情況下,我還注意到每個進程的 RAM 使用量永遠不會超過 10 MB,這可能會影響 CPU 使用率。
我的問題是,我怎麼樣才能開始來診斷這個問題?我的一些假設是:
- 作業系統偵測到我的筆記型電腦已使用 2 年,並嘗試透過限制 CPU/RAM 使用來延長其使用壽命
- 如果某個行程的 CPU/RAM 使用量已經消耗了相當長一段時間,那麼作業系統可能會限制該行程的 CPU/RAM 使用量。
- 有人遠端存取我的筆記型電腦並對我進行惡意攻擊
我在一台配備 Intel(R) Core(TM) i3-4005U CPU @ 1.70GHz、4 核心、8 GB RAM、HDD 的筆記型電腦上執行 Linux Mint 17.3
提前致謝。
編輯:這是程式運行時的 vmstat 輸出
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 1 0 2773588 242912 2522744 0 0 114 54 229 812 11 2 83 5 0