CentOS 虚拟机性能问题

CentOS 虚拟机性能问题

全部,

目前,我们通过 VMWare 在服务器上运行 VM CentOS。我遇到了性能缓慢的问题。在最初创建服务器时,速度非常快,但随着时间的推移,速度变得难以忍受的缓慢。

我有点困惑,因为我们没有使用任何交换,而且我们的负载也不是很糟糕。

这是我的最佳输出:

top - 15:38:49 up  1:10, 13 users,  load average: 6.94, 6.92, 6.31
Tasks: 165 total,   7 running, 158 sleeping,   0 stopped,   0 zombie
Cpu(s): 50.0%us, 50.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  16189104k total, 14704772k used,  1484332k free,    61140k buffers
Swap:  4095992k total,        0k used,  4095992k free,  1201532k cached

CPU 占用最高的项目是

 PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND    
 20   0  1969m 1.1g  10m S  2.5  7.4   3:39.35 java 

我确信我忽略了一些愚蠢的事情,但此时 SU 到另一个用户需要 20 秒。

答案1

如果你安装了 strace(yum install strace),你能否找到一个运行缓慢的命令(你在帖子中提到了 su)并在 strace -cf 下运行它:

# strace -F -c su - gonzo -c exit
...
Process 3583 detached
Process 3562 resumed
Process 3563 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 95.10    0.291882        7484        39        18 waitpid
  2.01    0.006160         474        13           execve
  0.77    0.002359          24        98           munmap
  0.75    0.002310         110        21           clone
  0.32    0.000973          24        41           mprotect
  0.19    0.000586           3       194           rt_sigaction
  0.18    0.000556           3       211           read
  0.16    0.000497           2       263           mmap2
  0.15    0.000471          43        11           write
  0.10    0.000301           2       184         2 open
  0.05    0.000151           0       418           rt_sigprocmask
  0.04    0.000119           7        17           getrlimit
  0.04    0.000116           1       157           fstat64
  0.03    0.000101           1        75        23 access
  0.02    0.000065           0       270         5 close
  0.02    0.000061           1        98           fcntl64
  0.02    0.000052           2        23        22 connect
  0.01    0.000034           1        67        17 stat64
  0.01    0.000032           1        25           getuid32
  0.01    0.000031           2        18           sigreturn
  0.01    0.000030           1        37           brk
  0.01    0.000029           7         4           setreuid32
  0.00    0.000000           0         1           chdir
  0.00    0.000000           0         4           time
  0.00    0.000000           0         1           getpid
  0.00    0.000000           0         3           alarm
  0.00    0.000000           0         9           pipe
  0.00    0.000000           0         7           ioctl
  0.00    0.000000           0         1           umask
  0.00    0.000000           0        28           dup2
  0.00    0.000000           0         1           getppid
  0.00    0.000000           0         1           getpgrp
  0.00    0.000000           0         1           setsid
  0.00    0.000000           0         1           setrlimit
  0.00    0.000000           0         8           readlink
  0.00    0.000000           0         1           getpriority
  0.00    0.000000           0         1           setpriority
  0.00    0.000000           0         2           uname
  0.00    0.000000           0         2           _llseek
  0.00    0.000000           0         6           poll
  0.00    0.000000           0         1           getcwd
  0.00    0.000000           0        16           getgid32
  0.00    0.000000           0        16           geteuid32
  0.00    0.000000           0        16           getegid32
  0.00    0.000000           0         4           setregid32
  0.00    0.000000           0         1           setgroups32
  0.00    0.000000           0         1           setuid32
  0.00    0.000000           0         1           setgid32
  0.00    0.000000           0         6           getdents64
  0.00    0.000000           0        11           gettid
  0.00    0.000000           0        13           set_thread_area
  0.00    0.000000           0         3           keyctl
  0.00    0.000000           0        29           socket
  0.00    0.000000           0         2           send
  0.00    0.000000           0         6           sendto
  0.00    0.000000           0        12           recvfrom
------ ----------- ----------- --------- --------- ----------------
100.00    0.306916                  2500        87 total

然后您将能够看到哪些系统调用耗费了时间,这可能会给我们提供导致系统缓慢的原因的线索。

strace -tT 也可能有用。

您还可以将 strace 附加到正在运行的进程(strace -p)并了解它们正在做什么。

问题:如果停止所有 Java 进程,平均负载会开始下降吗?

答案2

安装/更新 VMware 工具。在物理服务器的 BIOS 中启用虚拟化支持(如果您的 CPU 支持,您将有此选项)。您正在使用 VMware 的哪种虚拟化解决方案?检查客户机 (VM) 和主机 (VMware 服务器) 计算机的性能。请指定 top 是来自客户机还是来自主机。您在主机中有多少内存,从客户机分配了多少内存?您是否对虚拟机有过量内存?主机是否在进行交换?

答案3

您为客户机分配的 vCPU 数量比主机少,不是吗?我怀疑您的客户机有两个 vCPU。主机有多少个?

过度订阅 CPU 可能会导致这种行为。

此外,还有一个选项可以降低 CentOS 虚拟机客户机中的滴答率,这可能会有所帮助,尽管我不认为这是根本原因。请查看第 3 节中的第一个要点http://wiki.centos.org/Manuals/ReleaseNotes/CentOS5.1

答案4

尝试使用“iostat”和“vmstat”工具。它们会为您提供有关正在发生的事情的更多信息。也许“sar”也会对您有所帮助。(您需要安装“sysstat”包才能获取这些工具。)

请在此处打印这些程序的输出。这样我们就可以为您提供更多帮助。

另一件好事是按照“戴维”告诉你的做。

相关内容