VMWare虚拟机也咬人

来源:互联网 发布:java线程和进程的区别 编辑:程序博客网 时间:2024/05/18 03:27
    这是我第二次遭遇VMWare虚拟机伪性能故障,第一次解决这个问题为了赢得了参加BEA培训的机会。这次问题很诡异,这是一个统计用的JSP页面打开非常慢,无需登录直接使用,可是通常要等待数分钟才能打开。 这种事情实在太不正常了,论压力,访问用户几乎可以说是屈指可数,通常只有一两个人访问,主要用于演示汇报用。我检查了JVM的参数,发现有一个问题-server参数没有设置,加上后查询速度快了一些,但是访问速度还是很慢。但是有一个奇怪的现象,我在服务器上本地访问,速度还可以接受,但是远程访问则不稳定,有时候和服务器本地访问差不多,有时候要数分钟之久。我一时也解释不清楚,怀疑是网络不稳定造成的,可是持续ping服务器没有丢包现象。后来我又发现一个问题,性能监控器开着竟然占用11%左右的CPU,太不正常了。
    可是我还是没有怀疑到虚拟机上,一直到后来我回到家里,在网上写BLOG,写着写着突然想起,我又被VMWare虚拟机咬了一口。原因很简单,VMWare虚拟机默认情况下是动态分配资源的,一台实体机上可以部署多个虚拟机,分配给某一个虚拟机的CPU资源不是固定的,负载大分配多一些,负载小分配少一些,这样可以充分利用硬件资源。但是这种动态特性是有延时的,和你实际负载变化是有一定的相位差的,而且我感觉VMWare的这个调整速度不是很快。因为当我在服务器上访问过那个页面,远程持续几分钟可以得到比较好的访问速度。因为这种调整是有时滞的,而这个Web应用大量地与数据库交互,CPU工作状态是,忙--闲--忙--闲交替的,主要的处理任务都是数据库完成的,忙的时候刚刚把CPU拉上来一点,碰到数据库访问又掉下去了,接下来又拉起来一点,又掉下去了。于是CPU负载一直保持在比较地的水平。
    如果你用CPU性能测试工具,因为负载是持续很高,所以能够用足硬件性能,测出的结果与实体机差别很小。甚至你用性能监控器监测CPU的相关指标,也看不出什么大的问题,因为CPU会随着负载变化而变化,所以不会出现很严重的性能瓶颈。于是问题隐藏的很深,因为很少有人去关心CPU的真实工作频率。
    现在我们遭遇新的问题,需要采用新的工具,来检测这样的问题,这是虚拟技术引入的新问题。我们面临的IT环境越来越复杂,网络就已经够我们头痛的了,现在又冒出虚拟化这样的问题。软件开发人员必须了解这方面的问题,思路开阔些。
原创粉丝点击