系统太慢

系统太慢

我的 Linux 系统响应速度非常慢。我应该等待才能得到命令的结果。

我该如何调查才能知道他的行为有问题?

答案1

解决 Linux 上的性能问题并不简单,我不会涵盖所有可能性。然而,大多数问题通常分为 3 类:CPU使用率高,内存使用率高或者输入/输出使用。注意:它们都是相互关联的。

第一种:top -b -n 1 | head -15

这将为您提供以下输出:

top - 15:32:09 up 19 days,  2:32,  2 users,  load average: 0.61, 0.46, 0.42
Tasks: 208 total,   1 running, 207 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.9%us,  3.6%sy,  0.0%ni, 95.2%id,  0.3%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  16430432k total, 15188864k used,  1241568k free,   304624k buffers
Swap:  2097148k total,      112k used,  2097036k free,  7342636k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
16106 user   20   0 4070m 2.1g 2.1g S   30 13.5   4678:57 VirtualBox
26070 user  20   0 6113m 749m 697m S    6  4.7 628:55.93 VirtualBox
14863 user   9 -11  272m 3192 1804 S    2  0.0   5:57.19 pulseaudio
    1 root      20   0 24724 2548 1276 S    0  0.0   0:05.32 init
    2 root      20   0     0    0    0 S    0  0.0   0:00.15 kthreadd
    3 root      20   0     0    0    0 S    0  0.0   0:33.45 ksoftirqd/0
    6 root      RT   0     0    0    0 S    0  0.0   0:03.74 migration/0
    7 root      RT   0     0    0    0 S    0  0.0   0:02.51 watchdog/0

首先看一下平均负载。查看这里了解它的含义(理解这个概念非常重要)。

重要的 :下面我假设您有一个单核(1 个 CPU,没有双核,...)

如果 5 分钟后平均负载小于 1,则 CPU 负载正常。此时我不确定它可能是什么。继续排除故障,就像不正常一样。

如果 5 分钟后平均负载大于 1,则 CPU 负载较高。要了解 CPU 负载高的原因,请检查 top 给出的输出中的以下条目:

在上面的输出中,您可以看到进程列表。看专栏%中央处理器并检查是否看到进程使用 100%。事实上,它们使用 100% 的 CPU 可能是问题,也可能不是问题,但作为测试,最好阻止它们。

要在 top 中停止某个进程,请按“k”并输入该进程的 PID 值。

重要的:写下该进程的名称。在杀死它们之前,尝试了解它们的作用(在谷歌中搜索)。您只能以普通用户身份停止您拥有的进程(在 USER 列下检查)(否则您需要是 root,但要小心您杀死的进程,如果有疑问,请不要这样做)。还可以看看%我们%sy价值观,我们代表用户和西对于系统。基本上它们分别代表用户空间和内核空间的CPU使用率。

如果系统速度加快,则可能是您杀死的进程导致了问题。如果没有,请继续

读取值%wa。高吗? (超过50%),如果它很高,则意味着磁盘的输入/输出(I/O)很高并且CPU正在等待。使用该命令iostat确定哪个驱动器速度慢。

您还可以检查内存使用情况。

类型自由-m在命令行中。你应该看到这样的东西:

                 total       used       free     shared    buffers     cached
Mem:         16045      14835       1209          0        298       7172
-/+ buffers/cache:       7365       8679
Swap:         2047          0       2047

检查正在使用的缓冲区/缓存中的值。如果使用太多内存,则该值应该接近总计。

还要检查交换中的已用值(如果您有交换分区)。如果它很高,意味着接近总计下看到的最大值(对于交换),则意味着您的系统正在进行大量交换,这意味着它正在分页到磁盘(这比 RAM 慢得多)。

同样,这可能无法解决您的问题,但这是一个好的开始。

答案2

签入统计:

#!/bin/sh
while [ 1 ]
do
/usr/bin/iostat -x -m -t 10 6 >> /var/log/iostat.`date +%Y%m%d`.log 2>&1
sleep 10
done

相关内容