如何處理無回應的瀏覽器腳本?

如何處理無回應的瀏覽器腳本?

當我的電腦當機時,通常透過進入終端並運行 top 找出是什麼佔用了記憶體並殺死該進程來解決問題非常容易。有時當它嚴重凍結時會很困難,我必須按CTRL+ ALT+F1才能進入終端。另外,設定一個用於運行 xkill 的鍵盤快捷鍵也很方便,這樣我就可以殺死我知道正在凍結它的 GUI 應用程式。

即使在遇到這個問題多年之後,我仍然不知道如何處理這些無回應的瀏覽器腳本。有時我的電腦死機得很厲害,我無法移動滑鼠指針,最終它解凍了,我看到其中一個瀏覽器(以前一直是firefox,最近是chrome),會彈出一個窗口,說有一個javascript腳本沒有響應。它讓我可以選擇殺死它,但點擊“殺死”按鈕似乎永遠無法解決問題。

你如何處理這個問題?另外,您通常如何處理記憶體過載問題?我以前只是點擊CTRL+ ALT+ T,運行 top,看看哪個程序使用了最多的內存,然後殺死它,但這需要很多步驟,當你的計算機凍結時,單個步驟可能需要很長時間。因此,我正在尋找更好的方法,例如設定終止開關來一步完成此操作,或設定守護程序來終止任何即將凍結電腦的程式。

另外,找出導致問題的程序的最佳方法是什麼?頂部並不總是很容易看到,因為有時頂部顯示沒有程式佔用過多的CPU,但如果我向下滾動,我會看到該程式大約有50 個實例正在運行,所以如果我能看到組合的CPU,那就更好了該程式的使用。 Firefox 和 Chrome 是兩個主要罪魁禍首,有時是 sublime-text-3 (也許這是因為打開了太多選項卡?)。

所以我找到了這個指令:

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head

現在給出了這個清單:

  PID  PPID CMD                         %MEM %CPU
 6896   968 /opt/google/chrome/chrome - 13.1  2.7
27334  4769 /usr/lib/firefox/firefox     6.6 13.0
 5607  4769 /usr/bin/compiz              4.7 44.7
26381 26363 /usr/lib/libreoffice/progra  2.7  0.0
  953  4769 /opt/google/chrome/chrome h  2.0  3.0
 2777  2457 /usr/lib/xorg/Xorg -core :0  1.8 29.5
 6980  4769 /usr/lib/x86_64-linux-gnu/z  1.6  0.0
 8180  8167 mono /usr/lib/AirVPN/AirVPN  1.6  2.1
 1096   968 /opt/google/chrome/chrome -  1.4  0.1

我的電腦現在沒有當機,所以還好,但是當我嘗試使用 Firefox 時,它本身就死機了。我傾向於打開大量選項卡,這就是為什麼我在運行 top 時看到這麼多 chrome 和 firefox 實例的原因嗎?

我發現 htop 提供了比 top 更多的選項,因此它可能是診斷問題的更好工具。關於這一切,有一些事情我不明白,首先,當涉及到電腦定期凍結時,%CPU 或%MEM 哪個更重要。 htop 允許您按任一排序,以下是當我按記憶體使用量排序時它顯示的內容:在此輸入影像描述

這是當我按 CPU 使用率排序時得到的結果:在此輸入影像描述

就像我在運行 ps 時看到的那樣,firefox 和 chrome 佔用了大部分內存,而 compiz 佔用了大部分 CPU。解凍系統時還有其他重要因素需要考慮嗎?例如,進程運行的時間長度是否起作用,我發現 compiz 的運行時間比其他任何進程都長:在此輸入影像描述

至於killswitch,我找到了別人寫的一個:

while [ 1 ]; do 
    echo
    echo checking for run-away process ...

    CPU_USAGE=$(uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g")
    CPU_USAGE_THRESHOLD=300
    PROCESS=$(ps aux r)
    TOPPROCESS=$(ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | grep -v PID | head -n 1)

    if [ $CPU_USAGE -gt $CPU_USAGE_THRESHOLD ]; then
        kill -9 $(ps -eo pid --sort=-%mem | grep -v PID | head -n 1)

        echo "High memory usage process killed $TOPPROCESS\n"
        echo "Load average was at $CPU_USAGE\n"
    else
        echo 'CPU Load Back to Normal'
        exit 0
    fi
done

但我並不能 100% 確定它是如何運作的或它有什麼作用。當我跑步時:

uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g"

它傳回的數字如 149、179、178。

它們不是我在使用 htop 顯示的應用程式的任何頂部記憶體中看到的進程 ID。

單獨運行正常運行時間,我得到這個:

17:49:53 up 1 day, 11:09,  2 users,  load average: 3.16, 2.45, 2.03

所以我的系統已經運作了 17.49 小時。我不知道平均負載對我的計算機意味著什麼。最近我哥哥給了我這台電腦,因為他的辦公室裡有一台未使用過的電腦,當我檢查規格時:

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 26
Model name:            Intel(R) Core(TM) i7 CPU         940  @ 2.93GHz
Stepping:              4
CPU MHz:               1867.000
CPU max MHz:           2934.0000
CPU min MHz:           1600.0000
BogoMIPS:              5852.21
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-7

我非常震驚,它是一個野獸,8 個 CPU。還有內存:

free -lm
              total        used        free      shared  buff/cache   available
Mem:          12005        7154         311         531        4539        3996
Low:          12005       11694         311
High:             0           0           0
Swap:         30516        1002       29513

12 GB,天哪,我不知道。我的舊筆記型電腦有 2 Gb。所以現在還是個謎,為什麼會這麼冷。

所以我想知道的是:

1.) 找出導致系統速度變慢和死機的最佳方法是什麼?

2.) 如何在不終止實際瀏覽器的情況下處理這種特定的無回應腳本情況?我使用像 NoScript 這樣的插件,但很多時候我需要啟用 javascript。某些插件也會使用腳本。為什麼殺了他們並不能解決任何問題,是因為他們實際上不能被殺嗎?有沒有一種方法可以編寫一個腳本來搜尋瀏覽器並找到哪個選項卡正在運行帶有無響應腳本的頁面,然後關閉並重新啟動該選項卡?或者更好的是,只是以一種使計算機能夠再次正常運行的方式終止腳本本身?我不知道為什麼無回應的腳本會凍結我的整個系統,我猜測瀏覽器在嘗試運行崩潰的腳本時會消耗過多的記憶體。

2.) 解凍系統的最佳方法是什麼,尤其是在無法移動滑鼠指標的最壞情況下。連接到終止開關的快速鍵組合是可行的方法嗎?

3.) 對於製作終止開關,您將如何做?腳本該做什麼?它應該找出哪個程式使用最多的記憶體和/或 CPU 並殺死它。我更喜歡採用更複雜的方法,因為在某些情況下,使用最多內存或CPU 的應用程式可能是我需要保持打開狀態的應用程序,例如,如果我正在使用Firefox,殺死它可能會導致數據遺失。我可以為腳本提供一個不太重要的應用程式列表,這樣它就可以遍歷該列表並評估它們是否消耗了足夠的內存,值得殺死它們。

4.) 增加 SWAP 分割區的大小會有幫助嗎?

答案1

您的瓶頸是任務管理器(例如htop.在這種情況下,Chrome 選項卡似乎導致 RAM 溢出。幸運的是,Chrome 自帶了自己的任務管理器這可以讓你查看並殺死哪個選項卡正在佔用你的記憶體:

谷歌瀏覽器工作管理員

Chrome 擴充功能如偉大的吊帶者惰性標籤還有助於節省 RAM。

如果 Chrome 不是罪魁禍首,並且您需要快速回應的系統,請參閱:匆忙! Ubuntu 的 RAM 很快就耗盡了,我的電腦即將完全死機!什麼命令可以拯救我?

相關內容