我们有一个VMWare ESXi 4.1服务器托pipe许多Linux和Windows客人。 最近,一个新的Linux客户添加到这台服务器,似乎performance良好。 然后安装Tomcat和这个服务器上的一些其他应用程序,这似乎导致服务器运行得非常慢,没有任何明显的资源问题。
性能下降包括:
VMWare控制台和监视命令都不会报告任何CPU或内存使用率过高的问题,但是显然某种程度上会降低服务器的速度。
有没有人有任何想法可能会导致这个问题,以及如何解决?
谢谢,
汤姆
编辑
根据您的问题,我已经查看了所示的VM主机和VM guest虚拟机的一些性能指标。
首先我试着为这个虚拟机预留了大量的内存(3GB) – 这个服务器上没有其他的机器有任何的内存预留。
VM主机和guest虚拟机的交换率和交换率现在都为零。
guest虚拟机上的气球内存为零,在主机上为3.5GB(主机上的总内存为12GB)
客人的掉期利率也为零。
主机使用的交换平均为200MB。
主机和客户的压缩和解压缩率为零。
命令放弃主机为零。
读延迟非常低 – 最大10ms平均0.8ms。
写入延迟较高 – 几个尖峰到170毫秒,但大多数在25毫秒左右 – 这是不好的?
队列命令延迟为零。
物理磁盘读取延迟平均为5毫秒,但通常为10毫秒
物理磁盘写入延迟平均为15毫秒,但通常为20毫秒
我希望这有助于 – 让我知道,如果你需要更多的信息。
Java往往混淆了VMWare内存pipe理系统,因为它增加了另一层内存pipe理。
有一个知识库文章,链接如下。 但关键是将保留的虚拟机内存(不仅仅是虚拟机的内存大小)设置为大于Java(tomcat)的内存大小。
你发布的磁盘延迟数字并不是很低,它们相当高。 10ms以上的磁盘延迟将使交互式使用非常缓慢。 看看你的存储系统,看看你是否超额订购了IOPS。
http://www.techrepublic.com/blog/datacenter/calculate-iops-in-a-storage-array/2182
你在这里是双重虚拟化。 您有一个客户操作系统Java,在虚拟主机上的另一个Guest(LINUX)内部运行。 所有来自Java的调用都必须在转换为实际硬件资源之前进行双重转换。 在大多数情况下,与本机相比,这是一个比预期性能要慢的配方。
客户操作系统(如Java和数据库解决scheme)通常具有自己的自然合并层,以便能够将多个实例整合到单个硬件上,从而实现与通常情况下的转弯和整个主机操作系统虚拟化成客户虚拟化解决scheme。 使用本地整合机制的核心优势在于,避免在访客操作系统(Java)使用实际硬件资源的方式上添加另一个仲裁层。 有时pipe理程序将成为你的朋友,允许访问资源,而不是许多次。
您是否考虑过裁减一个仲裁层以访问硬件并查看更多本地VM Tomcat实例,例如VMWARE的tc服务器, http://www.vmware.com/products/vfabric-tcserver/ ,甚至是Java OS实例JNODE还是SANOS?
Debian Lenny(5.0)服务器也发生了这种情况,主要是安装Tomcat之后的SSHlogin时间问题。 在看到很多关于DNSparsing的评论之后,我们发现放慢系统速度的是Avahi-Daemon而不是Tomcat。
做一个'apt-get purge avahi-daemon'解决了sshlogin延迟。