![Ubuntu 12.04 在笔记本电脑上运行内存/CPU 密集型进程时会冻结](https://linux22.com/image/1369270/Ubuntu%2012.04%20%E5%9C%A8%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91%E4%B8%8A%E8%BF%90%E8%A1%8C%E5%86%85%E5%AD%98%2FCPU%20%E5%AF%86%E9%9B%86%E5%9E%8B%E8%BF%9B%E7%A8%8B%E6%97%B6%E4%BC%9A%E5%86%BB%E7%BB%93.png)
我有一台 Dell Precision M4500 笔记本电脑,配备 4GB RAM 内存和 Ubuntu 12.04 64 位,并安装了 8GB 交换内存。启动常用的 Java 开发环境(Eclipse、MySQL Server、SQuirreL、Chrome 中的几个选项卡、Skype 和 Tomcat,在开发模式下部署了相对较小的 GWT webapp)后,剩余大约 100 MB 的可用内存(free -m
输出如下):
total used free shared buffers cached
Mem: 3944 3812 131 0 35 579
-/+ buffers/cache: 3197 746
Swap: 8787 422 8365
按 RES 内存排序运行top
显示以下内容:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16509 yura 20 0 2540m 593m 13m S 0 15.1 1:45.25 java
10727 yura 20 0 5290m 441m 20m S 0 11.2 11:16.87 java
15886 yura 20 0 4324m 365m 10m S 0 9.3 2:37.32 java
19666 yura 20 0 3030m 292m 29m S 0 7.4 0:12.25 java
4363 root 20 0 307m 180m 44m S 5 4.6 72:57.08 Xorg
4905 yura 20 0 557m 162m 28m S 3 4.1 39:02.73 skype
2403 mysql 20 0 1531m 151m 3296 S 0 3.8 2:06.37 mysqld
5717 yura 20 0 974m 133m 26m S 1 3.4 18:14.44 chrome
11957 yura 20 0 978m 106m 14m S 0 2.7 1:04.37 chrome
5771 yura 20 0 994m 96m 20m S 0 2.5 5:20.52 chrome
18599 yura 30 10 650m 91m 51m S 0 2.3 0:04.78 update-manager
5980 yura 20 0 1285m 68m 9.9m S 3 1.7 21:16.95 chrome
19600 yura 20 0 919m 58m 21m S 0 1.5 0:02.08 chrome
19608 yura 20 0 914m 54m 21m S 0 1.4 0:12.11 chrome
16546 yura 20 0 916m 53m 20m S 0 1.4 0:34.79 chrome
16654 yura 20 0 930m 50m 21m S 0 1.3 0:01.61 chrome
4597 yura 20 0 1083m 48m 20m S 2 1.2 6:53.28 unity-2d-shell
5922 yura 20 0 443m 45m 25m S 0 1.2 1:00.64 chrome
8501 yura 20 0 631m 42m 16m S 0 1.1 0:08.44 unity-2d-spread
5820 yura 20 0 909m 34m 12m S 0 0.9 0:02.54 chrome
5762 yura 20 0 903m 33m 10m S 0 0.9 0:07.36 chrome
5889 yura 20 0 336m 28m 5124 S 0 0.7 1:56.02 chrome
4688 yura 20 0 327m 27m 5124 S 0 0.7 8:21.67 gnome-screensav
4617 yura 20 0 954m 24m 6728 S 0 0.6 0:12.13 nautilus
4743 yura 20 0 523m 22m 7408 S 1 0.6 6:41.10 unity-panel-ser
4895 yura 20 0 478m 18m 5300 S 0 0.5 0:03.86 webilder_unity_
5927 yura 20 0 323m 15m 380 S 0 0.4 0:00.00 chrome
4596 yura 20 0 634m 15m 9076 S 0 0.4 18:49.60 unity-2d-panel
4624 yura 20 0 544m 12m 7208 S 1 0.3 0:06.38 python
5727 yura 20 0 315m 12m 2788 S 0 0.3 0:00.26 chrome
4575 yura 20 0 905m 12m 6768 S 0 0.3 0:19.45 gnome-settings-
4613 yura 20 0 493m 10m 6156 S 0 0.3 0:15.71 nm-applet
5732 yura 20 0 331m 10m 592 S 0 0.3 0:00.26 chrome
4819 yura 20 0 358m 10m 2328 S 0 0.3 0:00.52 unity-lens-vide
4876 yura 20 0 540m 9636 4420 S 0 0.2 0:02.83 unity-scope-vid
现在,拥有 100 MB 的可用内存对我来说已经很好了,因为一切都运行良好。
问题出现了,当我运行mvn clean install
仅开始构建 GWT 应用程序的命令时:如果我通过关闭一些 Chrome 选项卡留下大约 800 MB 的可用内存,则在开发模式下运行的 SQuirreL 和 GWT webappmvn clean install
运行良好,尽管消耗了几乎所有可用的 800 MB 内存然后释放它。
但是,如果我不关闭上述应用程序(Chrome 选项卡、SQuirrel,让 GWT 应用程序在开发模式下运行),从而留下大约 100 MB 的可用内存,整个 Ubuntu 系统在构建过程中就会冻结。我尝试等待几分钟,但没有任何变化。
有人能告诉我是什么原因导致整个 Ubuntu 系统冻结吗?这很容易重现,所以我可以运行任何命令或检查,所以任何建议都会受到赞赏。
此外,有趣的是,每次 Ubuntu 在相同的构建步骤中都会冻结mvn clean install
。但我不知道为什么 Ubuntu 会在此期间冻结,因为这个构建步骤应该会消耗更多内存并使用更多 CPU。
提前致谢!
==================================== 编辑 =====================================
好的,今天我发现它实际上在一段时间后解冻了。我留下了 800 MB 的空闲空间,启动了构建过程,它冻结了,大约 7 分钟后解冻并成功完成构建过程。不过,等待 7 分钟是相当不可接受的,我不太明白为什么一个进程(构建过程)在内存不足的情况下会阻止其他进程(Chrome 选项卡、鼠标移动等)。除了升级到更多 RAM 之外还有其他选择吗?
==================================== 编辑 #2 =====================================
根据@terdon的建议,我在正常运行期间和冻结之前的构建过程中测量了CPU温度。 结果如下:
普通手术:
Adapter: ISA adapter
Core 0: +57.0°C (high = +84.0°C, crit = +100.0°C)
Core 1: +57.0°C (high = +84.0°C, crit = +100.0°C)
Core 2: +59.0°C (high = +84.0°C, crit = +100.0°C)
Core 3: +57.0°C (high = +84.0°C, crit = +100.0°C)
冻结之前:
Adapter: ISA adapter
Core 0: +74.0°C (high = +84.0°C, crit = +100.0°C)
Core 1: +75.0°C (high = +84.0°C, crit = +100.0°C)
Core 2: +76.0°C (high = +84.0°C, crit = +100.0°C)
Core 3: +77.0°C (high = +84.0°C, crit = +100.0°C)
所以,在我看来,这不是由于过热造成的,因为它只是稍微上升了一点,但甚至没有越过high
障碍。所以,在我看来,这更像是内存问题……