我正在分析我的扭曲服務器。它使用的內存比我預期的要多得多。內存使用量隨着時間的推移而增長。由guppy報告的內存使用情況與ps命令不同
ps -o pid,rss,vsz,sz,size,command
PID RSS VSZ SZ SZ COMMAND
7697 70856 102176 25544 88320 twistd -y broadcast.tac
正如你可以看到它的成本102176 KB爲,即99.78125 MB的。我從扭曲的沙井中使用古比來觀察內存使用情況。
>>> hp.heap()
Partition of a set of 120537 objects. Total size = 10096636 bytes.
Index Count % Size % Cumulative % Kind (class/dict of class)
0 61145 51 5309736 53 5309736 53 str
1 27139 23 1031596 10 6341332 63 tuple
2 2138 2 541328 5 6882660 68 dict (no owner)
3 7190 6 488920 5 7371580 73 types.CodeType
4 325 0 436264 4 7807844 77 dict of module
5 7272 6 407232 4 8215076 81 function
6 574 0 305776 3 8520852 84 dict of class
7 605 1 263432 3 8784284 87 type
8 602 0 237200 2 9021484 89 dict of type
9 303 0 157560 2 9179044 91 dict of zope.interface.interface.Method
<384 more rows. Type e.g. '_.more' to view.>
哼哼......好像有什麼不對勁。 Guppy顯示內存的總使用量爲10096636字節,即9859.996 KB或9.628 MB。
這是一個巨大的差異。這個奇怪的結果有什麼不對?我究竟做錯了什麼?
更新: 昨晚我寫了一個監視器腳本。它記錄了在線用戶的內存使用情況和數量。這是一臺無線電服務器,所以你可以看到有無線電和全部聽衆。這是我通過matplotlib生成的圖。 alt text http://static.ez2learn.com/temp/mem_figure.svg
有些奇怪。有時由ps打印的內存使用率非常低,像這樣
2010-01-15 00:46:05,139 INFO 4 4 17904 36732 9183 25944
2010-01-15 00:47:03,967 INFO 4 4 17916 36732 9183 25944
2010-01-15 00:48:04,373 INFO 4 4 17916 36732 9183 25944
2010-01-15 00:49:04,379 INFO 4 4 17916 36732 9183 25944
2010-01-15 00:50:02,989 INFO 4 4 3700 5256 1314 2260
內存使用量超低的原因是什麼?而且,即使沒有在線收音機,沒有聽衆,內存使用率仍然很高。
但即使我比較69 MB與10MB,它是太過分了。可能是什麼問題呢?而且,內存使用量隨着時間而增長。起初,RSS大約是2MB,現在是6x。 – 2010-01-14 18:10:17
一些由孔雀魚報告的物體,否則會被交換出去,以便蟒蛇可能會報告的,而RSS將不包括它..即時通訊不知道爲什麼過程中保留這麼多的內存壽,也許噸共享庫的..? – jspcal 2010-01-14 18:15:54
所有庫在啓動時加載。服務器啓動時,它在RSS字段中僅使用2個MB。圖書館佔用額外的內存使用量是沒有意義的。 有沒有什麼辦法知道那些看不見的內存使用情況? – 2010-01-14 18:42:53