当我的电脑死机时,通常很容易解决问题,只需进入终端并运行 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 允许您按其中任意一个进行排序,以下是我按内存使用情况排序时显示的内容:
因此,正如我运行 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:
Chrome 扩展程序伟大的吊带者和懒惰标签也有助于节省RAM。
如果 Chrome 不是罪魁祸首,并且您需要快速响应的系统,请参阅:快点!Ubuntu 的内存很快就用完了,我的电脑即将完全死机!什么命令可以拯救我?