我在VirtualBox上运行Debian的虚拟副本,在nginx/php5-fpm/MySQL堆栈上开发一个更大的PHP应用程序。开发在主机操作系统(Windows7 x64)中进行,代码作为客户操作系统中的共享文件夹挂载。
表现很差。以下是用于本机vbox文件系统和带有cifs的samba挂载的web差动输出:


无论是哪种情况,filemtime、file_exists和is_readable都需要几秒钟的时间才能运行。CPU负载很高,内存使用似乎很正常。
这三个函数的输出不是都缓存在stat缓存中吗?他们为什么要花这么长时间?
我真的很感激我能得到的帮助!
编辑:澄清,生产性能很好。在我们的(适当的,非虚拟的)临时服务器上,PHP代码在生产设置中以大约60 in的最大值执行,在dev模式下执行在100到200 in之间。
我需要帮助找出为什么VirtualBox在dev & prod模式下慢了100倍。
我刚检查过,生产设置产生~5秒的执行。仍然无法使用,而且很难用它来开发。
发布于 2012-01-16 21:52:37
使用nfs文件共享。Samba和vbox文件共享可能非常慢。
您的分析表明文件系统操作是瓶颈。
请阅读此博客文章http://clock.co.uk/tech-blogs/virtualbox-404-shared-folder-update以获得更多的见解。
发布于 2012-01-16 17:50:43
我最近回答了一个类似的问题。你可以找到我以前的答案,这里。
我会把它写一份小简历。您不应该仅仅基于app_dev.php前端控制器来衡量应用程序的性能。此控制器已创建,仅用于开发。在开发过程中,您会对配置文件、细枝模板、资产等进行大量更改。Symfony将检查100个文件以进行修改,并在必要时重新加载许多以前缓存的内容,从而导致对filemtime、file_exists和is_readable的大量调用。所有这些调用都在生产模式中被绕过,因为Symfony期望缓存中的所有内容都是最新的。因此,几乎所有可能的东西都被缓存在生产模式中,并在没有Symfony检查文件是否已被修改的情况下立即使用。这带来了巨大的性能提升,因为在开发中重新加载单个文件可能需要很多时间来解析它、检查对它的依赖关系、根据这些文件重新执行所有内容等等。
如果您正在对您的应用程序进行基准测试,请将其作为生产模式的基准测试。至少,如果无法按照生产中所期望的那样设置所有硬件,请执行以下步骤。清除生产模式的缓存,使用app.php而不是app_dev.php。另外,请查看文档中关于性能的部分,该部分可以在symfony.com上找到。在这里,控制台调用以清除和预热生产环境中的缓存。我认为cache:clear也会对缓存进行热身,但是由于我不能百分之百确定,所以我更喜欢同时打两个电话:
php app/console cache:clear --env=prod --no-debug
php app/console cache:warmup --env=prod --no-debug希望这能有所帮助。
你好,马特
发布于 2012-01-17 18:38:57
只是为了把这个绑起来:
最后,我在客户操作系统上设置了samba共享,将其绑定到第二个网络适配器(仅供主机使用,如本指南所示),并将其作为网络驱动器挂载在主机操作系统中。
有点麻烦,但执行时间从5-13秒缩短到100到500毫秒,在开发模式下进行分析。
https://stackoverflow.com/questions/8882411
复制相似问题