記憶體消耗測試腳本
故事的起頭是這樣的,話說 DR 手邊有一項任務需要處理大量的表格資料,為此便寫了一支 Python 程式。然而這支程式的資料迭代過程有一項設計缺失,會導致已經處理完並存檔的資料,仍持續累積在記憶體裡,造成程式的記憶體佔用量持續升高。當 DR 隨意地用 htop 查看系統資源時,才赫然發現若按照這個累積速度,恐怕二號機上的 16GB 記憶體會被整個吃光。但當下又不太想讓它重跑,於是就硬著頭皮看著它跑完。果不其然,在整個執行過程中,系統記憶體一度接近耗盡,連 swap 都用上了。
程式沒寫好雖然尷尬,然而轉念一想,若寫一支能夠刻意把記憶體吃光的程式,似乎對於某些情境是有意義的,像是用於測試系統高負載情形及設備可靠性等等。於是順手另外再寫了一支腳本程式(mem_consume_test.py),來專門實現記憶體的消耗。這支腳本係針對 Linux 平台設計,對於記憶體使用量的監控是從 /proc/meminfo 中的數值計算而成。
由於 DR 希望這支腳本能夠便利地在任一主流的 Linux 發行版上直接執行起來,所以在設計方向上,都是使用還蠻基礎的 Python 模組,應該是不太需要額外安裝套件就能夠執行:
- chmod +x mem_consume_test.py
- ./mem_consume_test.py
腳本在執行時會先從 Wikimedia Commons 下載一個指定的圖檔,作為記憶體佔用的資料來源。接著為了形塑出接近真實情境的資料操作,而不是反覆複製完全相同的資料,腳本會將圖檔連同持續更新的時間戳記,一併寫入到 JSON 格式中。再將 JSON 累加到資料陣列裡,藉此形成記憶體佔用量持續升高的效果。
預設的結束條件,是會在記憶體使用量達 95% 時終止執行。不過有可能在此之前就會先被作業系統關斷了,或者使用者也可以自行以 Ctrl + C 來終止程序。此外程式碼內也有預置一些可變更的額外設定,例如可明確指定資料筆數的上限等等。