所有,
目前我们正在通过VMWare在我们的服务器上运行一个VM CentOS。 加时赛我performance不佳。 在服务器的初始创build速度是极端的,但随着时间的推移,它变得非常缓慢。
我有点困惑,因为我们没有使用任何交换,我们的负载并不可怕。
这是我的最高输出:
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
我相信这是愚蠢的,我失踪了,但在这一点上,苏联需要20秒到另一个用户。
如果你已经安装了strace(yum install strace),你可以find一个很慢的命令(你在文章中提到了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进程的平均负载开始下降?
安装/更新VMware工具。 在物理服务器的BIOS中启用虚拟化支持(如果您的CPU支持此选项,您将拥有此选项)。 VMware使用哪种虚拟化解决scheme? 检查来宾(VM)和主机(VMware服务器)机器的性能。 请注明顶部是来自客人还是主人。 在主机中有多less内存,以及客户分配了多less内存? 你有内存过度使用虚拟机吗? 主机交换?
你已经给你的客户机比你的主机less了vCPU? 我怀疑你的客户有两个vCPU。 主持人有几个?
超额订购CPU可能导致这种行为。
此外,还有一个select,可以减lessVM guest虚拟机中使用CentOS的速度,虽然我不认为这是根本原因。 看看http://wiki.centos.org/Manuals/ReleaseNotes/CentOS5.1第3部分的第一个要点
50%的系统CPU使用率非常高,特别是没有任何交换或者iowait。 你有一些内核级别的资源咀嚼。 最有可能是一个坏的司机。 我会说第一次更新到一个新的内核。
尝试使用“iostat”和“vmstat”工具。 他们给你更多关于正在发生的事情的信息。 也许“萨尔”也可以帮助你。 (您需要安装“sysstat”包来获取工具。)
请在这里打印这些程序的输出。 那么我们可以帮助你更多。
另一件好事是做“戴维”告诉你的事情。
在运行VMWare Server的几台机器上,我遇到了一个问题,每台虚拟机随着时间的推移慢慢地使用越来越多的CPU资源。 停止虚拟机并重新启动,然后解决问题,虽然重新启动它们或暂停+恢复它们不。
这是在运行三个运行基本Web服务的虚拟机的低规格服务器(一个老的P4)上最容易看到的: 本页底部的图显示了随着时间的推移测量的CPU使用效果,在这个页面的底部,您可以看“负载平均”读数测量的效果。 在我运行VMWare的其他机器上,效果要less得多,因为它们的function要强大得多。 效果似乎与运行的虚拟机数量成正比(例如,如果运行两倍的虚拟机,则虚拟负载快速增加两倍)。 到目前为止,停止和重新启动虚拟机总是解决了这个问题 – 重新启动主机是不需要的(但是如果主机由于内核升级等原因而重新启动的话,它可以协调这个重新启动,并且虚拟机正在closures)。