最近,Ubuntu 崩溃了。我认为是内存不足,所以我运行了命令free -m
,发现内存使用率非常高。然后,我运行命令top
寻找罪魁祸首,但显示的进程使用的内存不到 1.5%。我怎么知道哪个程序导致 Ubuntu 崩溃/内存不足?以下是输出:
shafee@shafee-pc:~$ free -m
total used free shared buffers cached
Mem: 3824 3714 110 0 978 1954
-/+ buffers/cache: 780 3044
Swap: 99 0 99
shafee@shafee-pc:~$ top
top - 02:12:14 up 1:24, 2 users, load average: 0.16, 0.42, 1.49
Tasks: 182 total, 1 running, 181 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.9%us, 1.9%sy, 0.3%ni, 79.3%id, 15.5%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 3916708k total, 3803848k used, 112860k free, 1002308k buffers
Swap: 102396k total, 0k used, 102396k free, 2001852k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4200 root 20 0 289m 53m 38m S 2 1.4 1:06.45 Xorg
5590 shafee 20 0 19348 1368 956 R 2 0.0 0:00.01 top
1 root 20 0 24124 2136 1264 S 0 0.1 0:02.05 init
2 root 20 0 0 0 0 S 0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0 0.0 0:24.23 ksoftirqd/0
6 root RT 0 0 0 0 S 0 0.0 0:00.00 migration/0
7 root RT 0 0 0 0 S 0 0.0 0:00.00 migration/1
9 root 20 0 0 0 0 S 0 0.0 0:00.11 ksoftirqd/1
11 root RT 0 0 0 0 S 0 0.0 0:00.00 migration/2
13 root 20 0 0 0 0 S 0 0.0 0:03.89 ksoftirqd/2
14 root RT 0 0 0 0 S 0 0.0 0:00.00 migration/3
16 root 20 0 0 0 0 S 0 0.0 0:00.16 ksoftirqd/3
17 root 0 -20 0 0 0 S 0 0.0 0:00.00 cpuset
18 root 0 -20 0 0 0 S 0 0.0 0:00.00 khelper
19 root 0 -20 0 0 0 S 0 0.0 0:00.00 netns
21 root 20 0 0 0 0 S 0 0.0 0:00.01 sync_supers
shafee@shafee-pc:~$
或者有 110mb 的可用内存是正常的吗?我的问题与其他问题有关吗?
答案1
你读错了输出free
。Linux 内核会自行进行大量内存管理,从而分配比实际需要更多的内存 - 因此,你真正的“可用内存”量3044
位于+/- Buffers/cache
,因此实际消耗的内存只有 780 MB。
默认情况下top
将根据 CPU 消耗进行排序。您可以按Shift+M按内存消耗百分比进行排序 - 让您更好地了解哪些软件正在使用分配给内核的内存。
free -m
total used free shared buffers cached
Mem: 7873 3916 3956 0 231 1117
-/+ buffers/cache: 2567 5305
Swap: 12401 0 12401
并且按内存排序后位于顶部:
top - 17:05:18 up 2 days, 1:40, 4 users, load average: 0.21, 0.14, 0.11
Tasks: 237 total, 1 running, 234 sleeping, 0 stopped, 2 zombie
Cpu(s): 1.6%us, 0.8%sy, 0.1%ni, 96.7%id, 0.8%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 8062420k total, 4013632k used, 4048788k free, 237204k buffers
Swap: 12699644k total, 292k used, 12699352k free, 1144752k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1632 root 20 0 884m 240m 6532 S 0 3.1 1:20.17 java
3911 marco 20 0 1011m 165m 22m S 0 2.1 9:20.62 chrome
3852 marco 20 0 770m 162m 45m S 0 2.1 14:59.59 chrome
1091 root 20 0 491m 160m 118m S 3 2.0 29:19.44 Xorg
1747 marco 20 0 659m 108m 34m S 1 1.4 18:43.92 compiz
3964 marco 20 0 1113m 99m 21m S 0 1.3 18:51.88 chrome
1759 marco 20 0 668m 94m 21m S 0 1.2 2:27.42 nautilus
3046 marco 20 0 788m 86m 26m S 0 1.1 1:22.96 evolution
1793 marco 20 0 647m 85m 18m S 0 1.1 0:12.74 shutter
1791 marco 20 0 404m 85m 13m S 0 1.1 5:19.51 bitcoin
2938 marco 20 0 809m 78m 31m S 0 1.0 1:01.07 empathy
9630 marco 20 0 265m 73m 19m S 1 0.9 12:41.52 skype
9618 marco 20 0 914m 64m 21m S 0 0.8 1:14.04 chrome
1777 marco 20 0 432m 64m 14m S 0 0.8 1:45.96 pastie
最后,为了帮助您诊断实际软件是什么,请尝试将标志传递-c
给顶部:top -c
因为这将为您提供正在运行的命令的完整路径、名称和参数。
答案2
您可以使用以下脚本查看 GNU Linux 系统中各个应用程序的总内存使用情况
答案3
您可以启动应用程序 gnome-system-monitor 最好能找出哪些应用程序使用了多少 RAM,以及使用了多少 CPU。您可以更改进程的优先级以使其运行得更快,例如,如果您想转换视频等。
答案4
在Ubuntu我只需按下Ctrl-Esc然后使用感兴趣的领域对事物进行排序:内存、CPU、...