Mar*_*ijn 11 php cron apc command-line-interface
我最近开始在我们的服务器上使用APC缓存.我们产品最重要的部分之一是CLI(Cron /预定)流程,其性能至关重要.通常,批处理工作包括并行运行一些16-32个进程大约一个小时(它们每隔几分钟"重启").
默认情况下,在CLI中使用APC缓存是浪费时间,因为在各个调用之间不保留操作码缓存.但APC也包含apc_bin_dumpfile()和apc_load_dumpfile()功能.
我认为这两个函数可能用于在CLI模式下使APC高效,方法是在批处理文件之外的某些时间编译,存储在单个转储文件中并使各个进程加载转储文件.
有没有人对这种情况有任何经验,或者你能说明为什么它会起作用或者不起作用?如果可以合理地获得任何重大收益,无论是在内存使用还是性能方面?潜伏在阴影中的陷阱是什么?
nic*_*kl- 13
免责声明: APC在CLI中运行时非常棒,而且非常棒,但它同样令人沮丧.如果你正在旋转,请使用耐心,耐心,彻底,远离问题,请记住你正在使用缓存,这就是为什么它似乎无所事事,它实际上什么都不做.删除转储文件,从基础知识开始,如果不起作用,请忘记尝试新机器,新操作系统,如果工作正在复制,逐件扩展功能 - 有很多东西不起作用,如果它是工作提交或复制,添加另一个部分并再次测试,进行完整性检查重新检查以前工作过的复制品,陈词滥调与否; 如果一开始你没有成功尝试再试一次,你不能继续做同样的事情期待新的结果.
准备?这就是你一直在等待的:
apc.enable-cli = 1
在每个CLI请求上创建,填充和销毁APC缓存都不理想
Run Code Online (Sandbox Code Playgroud)- previous answer by unknown poster since removed.
你是绝对正确的,我们应该解决它吗?
如果您尝试在CLI下使用APC并且未启用它,您将收到警告.
就像是:
PHP Warning: apc_bin_loadfile(): APC is not enabled,
apc_bin_loadfile not available.
PHP Warning: apc_bin_dumpfile(): APC is not enabled,
apc_bin_dumpfile not available.
Run Code Online (Sandbox Code Playgroud)
警告:我建议你不要在php.ini中启用cli,这不值得沮丧,你会忘记你做了它并且还有很多其他脚本令人头疼,相信我不值得,使用启动脚本代替.(见下文)
根据mightye php的评论,我们需要禁用apc.stat,否则你会收到警告
就像是:
PHP Warning: apc_bin_dumpfile(): Excluding some files from apc_bin_dump[file].
Cached files must be included using full path with apc.stat=0.
Run Code Online (Sandbox Code Playgroud)
我们将使用此脚本启动启用apc的脚本(例如./php-apc.sh apc-cli.php),而不是php.ini直接更改属性.
#/bin/sh
php -d apc.enable_cli=1 -d apc.stat=0 $1
Run Code Online (Sandbox Code Playgroud)
准备好基本功能了吗?当然你是=)
<?php
/** check if dump file exists, you don't want to use file_exists */
if (false !== $dump_file = stream_resolve_include_path('apc.dump'))
/** so where were we lets have a look see shall we */
if (false !== apc_bin_loadfile($dump_file))
/** fetch what was stored last run just for fun */
if (false !== $value = apc_fetch('my.awesome.apc.store'))
echo "$value from apc\n";
/** store what gets fetched the next run just for fun */
apc_store('my.awesome.apc.store', 'awesome in cli');
/** what a shlep lets not do that all over again shall we */
apc_bin_dumpfile(array(),null,'apc.dump');
Run Code Online (Sandbox Code Playgroud)
注意:为什么不使用file_exists?因为file_exists == stat你看到了,我们想要获得这样的奖励apc.stat=0; 在包含路径内工作; 使用绝对路径而不是相对路径 - 由stream_resolve_include_path();避免返回include_once,require_once使用非*_once对应路径; 检查你的统计使用情况,当不使用APC(Muchos重要传感器)时,借助StreamWrapper echo来调用方法url_stat;哎呀:致命范围溢出错误!中止通知线程.请参阅url_stat
消息:StreamWrapper导致的错误超出了本讨论的范围.
使用启动程序执行基本脚本
./php-apc.sh apc-cli.php
Run Code Online (Sandbox Code Playgroud)
一大堆没什么事情发生了我们想要的正确,为什么你还想使用缓存?如果它确实输出了任何东西那么它就不起作用了,抱歉.
应该有一个名为apc.dump的转储文件,看看你能找到它吗?如果你找不到它那就没用了,抱歉.
好我们有转储文件没有错误让我们再次运行它.
./php-apc.sh apc-cli.php
Run Code Online (Sandbox Code Playgroud)
你想看什么:
awesome in cli from apc
Run Code Online (Sandbox Code Playgroud)
成功!=)
PHP中很少有人像工作APC实现那样令人满意.
的nJoy!
| 归档时间: |
|
| 查看次数: |
4335 次 |
| 最近记录: |