當在 Google Chrome 中開啟多個分頁數小時/數天時,我注意到某些頁面最終會使用大量 RAM,以至於整個作業系統 (XP) 由於分頁而變得無響應。當我幸運時,我終於可以為開啟的 URL 清單添加書籤,關閉 Chrome,然後重新開始;當我不這樣做時,我必須殺死 Chrome 並希望能夠恢復開啟的 URL 清單。
- 這是為什麼?插件記憶體洩漏?
- 有沒有辦法配置 Chrome,以便單一選項卡/頁面不會使用超過設定數量的 RAM?
謝謝。
答案1
我認為你應該選擇購買作業系統可以處理的盡可能多的記憶體。您不應該限制 Chrome 的 RAM 使用量,因為它只會破壞您的網路體驗。假設您大部分時間都使用電腦上網,您應該讓 Chrome 獲得所需的所有資源,以便提供您希望同時「享受」運行這些選項卡的效能。
我認為沒有辦法限制每個分頁的 RAM 使用量,但您可以完全限制 Chrome 的使用量。看這裡:
https://stackoverflow.com/questions/192876/set-windows-process-or-user-memory-limit
如果我是你,如果我想要流暢的網路衝浪,我寧願不這樣做。
答案2
我編寫了一個 Python 2.5 程序,當 chrome 的渲染器使用超過一定數量的記憶體時,它會殺死它們。我在 下運行這個程式
watch
。 (請注意,它使用普蘇蒂爾Python 中不包含該模組。import sys, os, psutil if len(sys.argv) == 2: try: limit = int(sys.argv[1]) except: limit = 200 # default 200MB else: limit = 200 uid = os.getuid() for p in psutil.get_process_list(): try: if (p.name == 'chrome' and any('type=renderer' in part for part in p.cmdline) and p.uid == uid): m = p.get_memory_info() #print p.pid,m, m.rss / 1024 / 1024, m.vms / 1024 / 1024 if (m.rss / 1024 / 1024) > limit: # kill if rss is greater than limit print 'Killed', p.pid p.kill() except psutil.error.NoSuchProcess: pass except psutil.error.AccessDenied: pass
我依靠會話好友當 Chrome 無法恢復開啟的分頁時,恢復開啟的分頁。
答案3
到目前為止我見過的唯一可以做到這一點的是在容器內執行 chrome和限制容器內存。
然而,這有一些重要的警告,
dockerize 設定和啟動順序使運行 chrome 變得複雜
其一,Chrome 已經使用核心容器來沙箱其線程;因此,您必須使用某種 root 權限來運行容器,以使其能夠正常運作。這是可以規避的,連結容器模型就是這樣做的。 (它幾乎做了它需要做的一切)
你幾乎肯定會失去 GPU 加速
讓音訊正常工作很複雜,但在連結容器模型中處理。
無論您預計在保固失效後會出現什麼問題,Chrome 都非常不喜歡被告知不要使用更多內存,並且會相應地表現出行為和發脾氣。
但它最終確實有效。
我更感興趣的是,將這些 ram 限制應用於 Electron Shell 應用程序,這些應用程式沒有預先建立的 docker 映像來為您調整它們。
題外話,但我想指出,Firefox 在有限的硬體上表現得很好,但我不認為這是一個真正的答案。
答案4
它不一定是插件。請注意,網頁不再是靜態的。有些網頁正在進行大量的非同步活動。添加插件的活動,您會得到一些未知數。
我發現的最好的補救措施是終止該網頁並重新加載它。 AFAIK,沒有辦法限制網頁使用的 RAM 量。