我目前遇到问题而且我不明白是什么原因造成的。
我可以将它缩小到一个非常简单的PHP脚本:
$start = microtime(true);
yaml_parse_file("someYamlFile.yaml");
print(microtime(true) - $start);
这是一个63 MB的文件,我试图解析
当我在自己的计算机上使用Wamp服务器尝试该脚本时,只需几秒钟即可完成
但是,当我在托管我的网站的远程服务器上运行相同的脚本时,运行大约需要170秒
如果我再次运行它,它只需要几秒钟。
几分钟后,没有任何网站访问者,如果我再次运行该脚本,则需要170秒!
在服务器方面,我不是专家。有什么可能导致这种情况的想法吗?
感谢。
编辑: 我尝试了fopen()和fread()而问题仍然存在。 第一次打开并读取文件花了2分多钟,第二次只打了几秒钟。 事实证明问题来自访问文件而不是来自yaml_parser。 我更改了标题,但仍然不知道导致问题的原因。
答案 0 :(得分:0)
你所说的一切在廉价的服务器上是合理的,驱动器的效率可能非常低。
文件通常使用sendfile打开,sendfile使用Linux Cache。 几分钟后负载再次变慢是有意义的 - >缓存无效。
这些问题都与PHP无关: - )
我建议你把那个文件放在Ramdisk上,这样它就可以放在RAM而不是磁盘上。
/ dev / shm是现代linux发行版上的默认ramdisk ==>在其下创建一个文件夹并将文件放在那里。
至于将数据放入Memcache(它应该在哪里):需要Memcached pecl扩展
添加(运行一次):
$m = new Memcached;
$m->addServer('localhost',11211);
$m->set('app_config',yaml_parse_file("someYamlFile.yaml"));
加载(在脚本中运行):
$m = new Memcached;
$m->addServer('localhost',11211);
$data = $m->get('app_config');