我有大数据部分要在APC中缓存(正常的文件缓存太慢)。对于此数据量,apc_store
函数始终返回false
:
我试着做这样的事情:
ini_set('apc.max_file_size', '128M');
die(ini_get('apc.max_file_size'));
输出为1M
!它不会抛出任何错误,但根本不起作用。我拥有的所有其他ini_sets(例如memory_limit
)都运行良好,所以这不是权限问题。
我的APC信息是:
Version 3.1.3p1
MMAP Support Enabled
MMAP File Mask no value
Locking type pthread mutex Locks
Revision $Revision: 286798 $
Build Date Apr 18 2010 06:56:17
设置为:
apc.cache_by_default On
apc.canonicalize On
apc.coredump_unmap Off
apc.enable_cli Off
apc.enabled On
apc.file_md5 Off
apc.file_update_protection 2
apc.filters no value
apc.gc_ttl 3600
apc.include_once_override Off
apc.lazy_classes Off
apc.lazy_functions Off
apc.max_file_size 1M
apc.mmap_file_mask no value
apc.num_files_hint 1000
apc.preload_path no value
apc.report_autofilter Off
apc.rfc1867 Off
apc.rfc1867_freq 0
apc.rfc1867_name APC_UPLOAD_PROGRESS
apc.rfc1867_prefix upload_
apc.rfc1867_ttl 3600
apc.shm_segments 1
apc.shm_size 128
apc.stat On
apc.stat_ctime Off
apc.ttl 0
apc.use_request_time On
apc.user_entries_hint 4096
apc.user_ttl 0
apc.write_lock On
我应该设置什么来允许缓存这样的大数据药剂?
根据@Ugo Meda的评论,我想与您分享我对这个问题的解决方案。正如他正确指出的那样,我无法通过ini_set
设置APC设置(即apc.max_file_size
)。它只是返回false
,而其他设置(如memory_limit
)运行良好!
所以我唯一能做的就是直接在apc.ini中设置它。这个文件在Ubuntu上的位置是:
/etc/php5/conf.d/apc.ini
有时你的APC设置在php.ini的[APC]部分-这个文件在Ubuntu上的位置是:
/etc/php5/apache2/php.ini
如果找不到,只需运行以下命令:
find / -name apc.ini
如果没有这样的文件(apc.ini),请尝试查找php.ini和[apc]部分:
find / -name php.ini
一旦找到正确的配置文件,就可以编辑它的选项了。我只是简单地添加了这两行:
apc.shm_size=512
apc.max_file_size=128M
编辑后,保存它,然后简单地重新启动Apache(Ubuntu-/etc/init.d/apache2 restart
)。如果由于某种原因,您无法运行此命令,或者您没有访问上述*.ini文件的权限,请在上面每个命令的开头添加sudo命令。
关于apc.shm_size的另一个注意事项:
如果您的APC版本低于3.1.4,则此配置选项的值必须以与我所写的格式相同的格式写入(末尾没有"M
")。如果您的版本是3.1.4或更高版本,那么您需要以这种方式指定它:512M
。
来源:http://e-mats.org/2010/10/apc_mmap-mmap-failed-cannot-allocate-memory/
@乌戈·梅达——再次感谢你向我指出这一点!