我注意到我们的 Web 项目 (Drupal) 在虚拟机中使用 memcached 时运行速度较慢。不使用 memcached 时,页面加载时间快两倍以上。我没有注意到任何不自然的 memcached 行为。
虚拟框是(使用 vagrant):
- Debian Squeeze 607
- 1 个 CPU 核心(ICH 主板驱动程序)
- 4G内存
- SSD 驱动器(ICH 驱动程序)
Drupal 的具体设置是:
$conf['cache_backends'][] = 'sites/all/modules/contrib/memcache/memcache.inc';
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';
$conf['cache_default_class'] = 'MemCacheDrupal';
$conf['memcache_key_prefix'] = 'oursite_';
仅将其与本机(非虚拟化)环境进行比较 - 在同一个项目中,memcached 的性能提高了 10-20%。
有什么想法吗?有什么我可以继续调查的地方吗?
答案1
您所看到的情况与我的预期基本一致。那些告诉您 VirtualBox“提供与真实硬件相同的性能”的人要么在撒谎,要么他们从未在 VirtualBox 和底层操作系统上运行过任何真实的、压力很大的工作负载。
当然,在某些情况下,VirtualBox 的性能会与物理硬件一样好(甚至可能略好),但这不是其中之一。
VirtualBox 是一个类型 2 虚拟机管理程序。
您在 VirtualBox 中执行的每个操作都必须影响模拟硬件,并传递到系统底层的真实操作系统以实际处理请求。
考虑到所有这些额外开销,我预计内存密集型程序(如 memcache)会在模拟中缓慢运行。
我真的没有任何建议来改善这些条件下的 VirtualBox 性能。
您可以调整设置,为您的 VirtualBox 实例分配大量 RAM,并告诉您的主机操作系统优先考虑 VirtualBox 进程并且永远不要将其换出,但这些都不是最佳选择。
我的建议是,除非您专门测试与 memcache 相关的功能,否则请关闭 VirtualBox 实例上的 memcache。
或者,切换到类型 1 虚拟机管理程序 (VMWare、Hyper-V) 或生产质量类型 2 虚拟机管理程序 (KVM)。您可能会看到性能更接近您在物理硬件上看到的性能。