我在我的debian 6 + nginx + apc 3.1.9 + php-fpm 5.3.10服务器上的响应速度慢。 我的网站是基于symfony 1.4。
我的设置是VPS与512MB内存几乎每次使用高达250MB。 只有当我打开APC时才会发生这种情况。 没有APCcaching有网站较慢的反应,但它performance稳定。
当我切换APC时,一些约1/20的请求performance得像是等待一些文件解锁或类似的东西,并且响应在5-6s之后发送。 (相同请求的共同响应大约在100毫秒内)我有这个APC设置:
extension=apc.so apc.enabled="1" apc.shm_size="32M" apc.num_files_hint = 100 apc.ttl="7200" apc.gc_ttl="600" apc.cache_by_default="1" apc.filters = "apc\.php$,apc_clear\.php$" apc.canonicalize="0" apc.mmap_file_mask="/tmp/apc-php5.XXXXXX" apc.enable_cli="0" apc.max_file_size = 5M apc.report_autofilter="0" apc.include_once_override="0" apc.write_lock="0" apc.stat="0"
fpm和nginx一样是multithreading的,所以我教会了它的locking会话文件,好的,将会话转移到了memcache中 – 网站速度要快得多(平均大概是50ms),但是有时很长的响应仍然存在。
Iam以fpmlogging缓慢的响应(阈值为3s),并捕获其中的一些:
config_core_compile.yml.php:在第二个日志中提到的3851只包含需要$ path的有效path到现有的php文件。
(第一个人花了20多岁!)
[15-Feb-2012 13:39:12] [pool www] pid 2205 script_filename = /www/www.site.com/current/web/index.php [0x0000000001d415f0] session_start() /www/www.site.com/releases/20120214220306/cache/frontend/prod/config/config_core_compile.yml.php:3779 [0x0000000001d41410] initialize() /www/www.site.com/releases/20120214220306/cache/frontend/prod/config/config_core_compile.yml.php:1507 [0x0000000001d3f0e0] __construct() /www/www.site.com/releases/20120214220306/cache/frontend/prod/config/config_factories.yml.php:114 [0x0000000001d3ea38] +++ dump failed [15-Feb-2012 12:39:00] [pool www] pid 2186 script_filename = /www/www.site.com/current/web/index.php [0x0000000001b80670] renderFile() /www/www.site.com/releases/20120214220306/cache/frontend/prod/config/config_core_compile.yml.php:3851 [0x0000000001b7f820] renderFile() /www/www.site.com/releases/20120214220306/lib/vendor/symfony/view/sfPartialView.class.php:124 [0x0000000001b7f138] render() /www/www.site.com/releases/20120214220306/lib/vendor/symfony/helper/PartialHelper.php:220 [0x0000000001b7f040] get_partial() /www/www.site.com/releases/20120214220306/lib/vendor/symfony/helper/PartialHelper.php:182 [0x0000000001b7ebe0] include_partial() /www/www.site.com/releases/20120214220306/apps/frontend/modules/hotel/templates/_list_tabs_boxmain.php:8 [0x0000000001b7e770] +++ dump failed
奇怪的是,它有时只发生…
find了..
这是因为apc.mmap_file_mask像所说的官方APC文档一样被设置为“直接文件支持的mmap”。 由于服务器安装程序是multithreading的,并且apc被存储在fysical文件中,所以正在locking文件的原因。
将其设置为共享内存非常重要。
所以现在我的apc.ini是:
apc.gc_ttl="600" apc.cache_by_default="1" apc.filters = "apc\.php$,apc_clear\.php$" apc.canonicalize="0" apc.mmap_file_mask=/apc.shm.XXXXXX apc.enable_cli="0" apc.max_file_size = 5M apc.report_autofilter="0" apc.include_once_override="0" apc.stat="0"