如何处理无响应的浏览器脚本?

如何处理无响应的浏览器脚本?

当我的电脑死机时,通常很容易解决问题,只需进入终端并运行 top 来找出占用内存的程序并终止该进程即可。有时当电脑严重死机时,这可能很困难,我必须按CTRL+ ALT+F1才能进入终端。此外,设置运行 xkill 的键盘快捷键也很方便,这样我就可以终止那些我知道会死机的 GUI 应用程序。

多年来,我一直没有想出如何处理这些无响应的浏览器脚本。有时我的电脑会死机,以至于我无法移动鼠标指针,最后电脑会恢复正常,我看到其中一个浏览器(以前一直是 Firefox,最近是 Chrome)会弹出一个窗口,提示 javascript 脚本没有响应。它让我选择关闭它,但点击关闭按钮似乎永远无法解决问题。

您如何处理这个问题?另外,您如何处理一般的内存过载问题?我以前只是按CTRL+ ALT+ T,运行 top,然后查看哪个程序占用的内存最多,然后将其终止,但那需要很多步骤,而且当您的计算机冻结时,单个步骤可能需要很长时间。所以我正在寻找更好的方法,例如设置一个终止开关以一步完成此操作,或者设置一个守护进程来终止任何即将冻结计算机的程序。

另外,找出导致问题的程序的最佳方法是什么?top 并不总是容易看到,因为有时 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 的运行时间比其他任何程序都要长:在此处输入图片描述

至于终止开关,我发现了别人写的一个:

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

但我并不完全确定它是如何工作的,也不知道它能做什么。当我运行:

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。还有 RAM:

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 自带任务管理器它允许您查看并终止哪个选项卡占用了您的 RAM:

Google Chrome 任务管理器

Chrome 扩展程序伟大的吊带者懒惰标签也有助于节省RAM。

如果 Chrome 不是罪魁祸首,并且您需要快速响应的系统,请参阅:快点!Ubuntu 的内存很快就用完了,我的电脑即将完全死机!什么命令可以拯救我?

相关内容