![KVM 和 JBoss Java 应用服务器](https://linux22.com/image/508889/KVM%20%E5%92%8C%20JBoss%20Java%20%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我们在 RHEL 和 CentOS 上都运行着大型 Xen 部署,并且最近开始研究 KVM,因为看起来 VM 的未来将在 Linux 上。
我们可以加载服务器并让一切正常运行。但是,当我们使用 JBoss(4.2 社区版,Sun JDK 6)加载新服务器并加载大型 EAR 时,服务器会变得有点疯狂。%sy 将跳升至 80-99% 并挂起很长时间,我们在主机上看到 %us 也有类似的跳升。我们起初认为这可能是 I/O,因为它似乎发生在 JBoss 启动时,但在加载完所有内容后会“冷却下来”。我们通过提取一些大型 tar.gz 文件并在 ear 上使用 jar -xvf 进行了一些测试,但无法重新创建。
然后我们开始想这可能是某种类型的内存访问问题。我们加载了一个会产生大量内存活动的 C 程序,果然我们再次看到了峰值。虽然没有那么高,但我们确实看到它跳动了。然后我们编写了一个小型 Java 程序来做同样的事情,果然我们再次看到它跳动了。
有什么想法可能导致这种情况吗?这只是 KVM 的工作方式吗?
顺便提一下,我们在任何其他设置上都没有看到这种行为。Xen、VMWare 和/或本机 iron。系统确实似乎比我们的 Xen / VMware 慢一点。
答案1
一个问题和建议:
您使用的是什么文件系统?在 Fedora 12 和 13 系统上,我发现使用 ext4 的性能非常出色,但使用 btrfs 的性能却非常糟糕。
扩展@Ophidian 评论 - 尝试使用 Fedora 13 来查看它如何使用最新的 KVM 和 libvirt 库运行。
答案2
如果可能的话,我想看看你用来重现此问题的测试代码。我一直在测试大量 KVM 客户机,额外的基准测试总是好的,特别是如果已知它会导致问题
了解虚拟机配置也会有所帮助——有多少 RAM、CPU、磁盘和网络类型等
答案3
我想知道您是否以某种方式在主机上进行交换。
您是否曾经/能否在 Fedora 12 上尝试过此操作,以查看所有组件(kvm、libvirt、kernel、ksm)的较新版本是否表现出同样的行为?KSM 是在 Fedora 12 中添加的,据称可提供更高效/更好的内存管理。
除了 3dinfluence 建议联系 Red Hat 支持和 KVM 邮件列表外,我还建议使用该fedora-virt
列表,因为 libvirt、kvm 和 Fedora 虚拟化生态系统其余部分的大量开发人员都是该列表的常客fedora-virt
。他们通常反应迅速且乐于助人。
答案4
您正在运行 ksmd(共享内存重复数据删除程序)吗?这可能会给虚拟机管理程序系统带来一些 CPU 开销,并且可能会导致与内存相关的停顿。
也许还值得看看将虚拟机固定到核心是否有帮助 - 您可能会发现从一个核心切换到另一个核心(或跨处理器)的客户机在内存密集型工作负载下会导致缓存刷新,从而搞砸事情。
请记住,就虚拟机管理程序而言,每个虚拟机都是一个进程,将 strace 附加到客户机进程并查看是否存在明显有问题的系统调用可能会很有启发。
最后,我找到了 Dag Wieer 的统计信息这对我的追踪问题工具包来说是一个很好的补充。
(因为我们即将研究在 KVM 下试用 JBoss,这与我的兴趣相关……)