通常,我们现场的基于debian-stable的应用程序的安装通常在VMware ESXi中运行在虚拟机中。 在一般情况下,我们无法查看或影响虚拟化环境,也无法访问例如VMware vCenter客户端或同等产品。 我在这里关注VMware,因为到目前为止,我们看到的是最常见的。
我们希望:
现在什么是X,Y和Z?
我们一次又一次地看到,当出现性能问题时,问题不在于我们的应用,而在于虚拟化环境。 例如,另一台虚拟机使用大量的CPU,内存或实际存储磁盘的SAN,这些数据会被我们的应用程序以外的其他应用程序所占用。 我们目前无法certificate或反驳这一点。
理论上也可能有时我们的应用程序很慢… 😉
如何确定我们的性能问题的根本原因:虚拟环境还是我们的应用程序?
性能问题通常有3个方面:CPU,内存和磁盘I / O。
在例如VMware中,pipe理员可以指定保留和限制,以MHz为单位,但是在一个ESX主机上,例如512MHz与另一个ESX主机上的512MHz完全相同,可能在完全不同的ESX群集中。
如何衡量我们是否真的得到了这个呢? 当我们的应用程序正在运行时,我们可以看到我们在4个CPU上的CPU利用率为212%。 是因为我们的应用程序做了很多事情,还是因为同一台主机上的另一台虚拟机正在运行一个CPU密集型任务并使用了所有的CPU?
如果我们要求例如16GB内存,这通常是configuration的,但由于膨胀 ,我们实际上只得到4GB,而且我们的应用程序performance不佳。
可以询问VMware工具当前的膨胀情况,但是我们发现它经常存在(或者至less是不准确的)。 我们已经看到了操作系统认为有16GB总RAM的例子,所有进程的驻留内存(RSS)的总和是4GB RAM,但是即使VMware工具告诉我们有0膨胀,也只有2GB RAM。 – (
另外,仅仅添加RSS是无效的,因为可以容易地共享RAM,例如,写入时复制内存,所以512MB + 512MB不一定意味着1GB,但意味着更less的意思。 因此,不能简单地从所有进程中减去RSS,以获得多lessRAM应该是空闲的,从而可靠地检测气球的度量。 人们可以检测到一些气球膨胀的情况,但也有其他情况下气球膨胀是有效的,但是不能用这种方法检测。
我想我们可以随着时间的推移读取和写入磁盘的数量,读取和写入的字节数,以及IO等待百分比。 但是,这会给我们一个磁盘I / O的准确画面吗? 我想如果有一个比特币矿工在使用所有CPU的另一个虚拟机上运行,即使底层SAN具有完全相同的性能,我们的IO等待百分比也会增加,这仅仅是因为我们的CPU资源不足,因此IO等待以%衡量 )上升。
总而言之,我们可以用什么语言来描述VMwarepipe理员,以便携和可测量的方式描述我们需要的性能?
严重的是,大多数VMwarepipe理员并不擅长:对资源pipe理的理解不够 ,通常没有Linux知识(它有帮助),缺乏时间带宽。 我发现大多数内部pipe理员很难保持深入的虚拟化知识。
幸运的是, 有一本书可以阅读 !
大多数VMware环境并不好:集群devise不佳,资源规划不合理,存储设备不合规格(例如Synology NAS),configuration错误的HA,无监控或修补。
VMware作为一个组织使我们失败:他们在传播最新信息和推广最佳实践方面尤其不利。 对于常见问题的基本search产生了2009年以及VMware较早版本的结果,尽pipestream程和devise随着时间而改变。
所有这些东西都会对你起作用。
您应该确定您的解决scheme的真正需求。 能够准确地说明您的设备需要: 2个vCPU,8GB RAM和500个IOP存储性能对于像我这样的人来说将会有很长的路要走。
另一种方法是观察一个健康或理想的环境,并从那里推断出这些指标。
您已经描述了某些部署的问题。 有什么问题和瓶颈?
一个正确大小的虚拟机的例子:
300用户组织的Exchange服务器。
VM资源监控的示例。
Good-ish: – 虚拟机是正确的大小。 – 整个集群CPU过度使用,但是我们没有发生争用。
坏上下的: