我發現我們的網站得到了慢長的標籤呆開放。使用Chrome的任務管理器,我縮小了問題:
每次下面的代碼行稱爲內存使用率增加:
$jquery.post(url, params);
我實現了一個1秒計時器這個代碼,並在幾分鐘之內內存使用量從30MB變爲250MB。註釋掉這一行代碼就可以解決問題。請注意,我只評論這一行;我仍然會生成URL和參數。所以這個問題肯定與這行代碼有關。每次運行大約2MB內存消耗。
顯然有某種memleak。我期望它與緩存或JSON反序列化結果有關(JSON結果可能相當大)。
任何人都可以提供解決方法嗎?即使僅僅強制一些垃圾收集也是可以接受的。 FWIW,內存使用量偶爾會減少,但不是太多(垃圾回收?)。我剛剛看到它從300MB下降到250MB,但現在又在向上移動。
更具體地說,代碼看起來像這樣...
...
init: function()
{
setInterval(function(){ SManager.updateAll(); }, 1000);
},
updateAll: function()
{
var url = SManager.SERVER_URL;
var params = new Object();
params.version = 1;
params.platform = 'web';
$jquery.post(url, params);
},
謝謝!
好吧,我用的Chrome配置文件選項卡採取堆快照。根據快照,儘管任務管理器中的內存使用量大於100 MB,但堆大小僅爲〜5MB。我要去嘗試挖掘一些文檔來理解兩者之間的關係,因爲我目前不明白內存如何被頁面佔用,但不在堆中...... – 2012-04-17 17:49:01
也許你的連接沒有正常終止?您可能可以在網絡選項卡中檢查該內容,或者在幾次請求後關閉Web服務器,並查看內存是否已釋放。 – Tgr 2012-04-17 17:55:57
另外,如果URL每次都不相同(請注意,即使您的URL參數相同,jQuery也可以將緩存中斷參數附加到URL),但可能會有某種瀏覽器端緩存正在進行(儘管對POST請求來說是不尋常的)。 – Tgr 2012-04-17 17:57:42