我正在调整一些服务器代码以获得最佳性能,但我得到了一些奇怪的结果。服务器似乎在虚拟机中比在本机运行时运行得更快。两种设置都使用相同的硬件。
服务器是为Linux编写的,测试客户端是100%标准POSIX。这两个应用程序都是用C语言编写的。
设置1 :(约300k请求/秒)
- OSX 10.7.4主机
- 在VirtualBox中虚拟化的Ubuntu Linux 12.04服务器
- VirtualBox已设置为使用最多100%的主机资源
- VirtualBox在网桥模式下,Ubuntu在网络上获取自己的IP
- 测试在OSX上运行的客户端程序
设置2 :( ~100k请求/秒)
- Ubuntu Linux 12.04服务器主机操作系统
- 测试人员和服务器本地运行,通过localhost连接
测试人员通过产生256个线程来工作,这些线程都独立连接到服务器并发送命令。服务器处理流水线中的请求,仅生成与可用核心数相等的多个线程。
到目前为止,我已经提出了以下可能性:
- OSX调度程序在处理测试程序的256个线程时效率更高
- Virtualbox的网络接口比linux的环回接口更有效
- 虚拟化服务器允许调度程序更有效地在测试人员和服务器之间划分时间
我需要弄清楚导致速度减慢的原因,以及我可以采取哪些措施来解决问题。
编辑以获取更多信息:
- 我无法访问任何其他计算机来运行测试人员
- 服务器类似于memcached,它不访问磁盘
- 4 Core i7 - 8GB RAM(测试仪和服务器的RAM足够多(即使在VM中))