访问和解析Web服务器上的文件需要很长时间

时间:2018-01-13 20:07:10

标签: time server


我目前遇到问题而且我不明白是什么原因造成的。 我可以将它缩小到一个非常简单的PHP脚本:

$start = microtime(true);
yaml_parse_file("someYamlFile.yaml");
print(microtime(true) - $start);

这是一个63 MB的文件,我试图解析 当我在自己的计算机上使用Wamp服务器尝试该脚本时,只需几秒钟即可完成 但是,当我在托管我的网站的远程服务器上运行相同的脚本时,运行大约需要170秒 如果我再次运行它,它只需要几秒钟。
几分钟后,没有任何网站访问者,如果我再次运行该脚本,则需要170秒!

在服务器方面,我不是专家。有什么可能导致这种情况的想法吗?

感谢。

编辑: 我尝试了fopen()和fread()而问题仍然存在。 第一次打开并读取文件花了2分多钟,第二次只打了几秒钟。 事实证明问题来自访问文件而不是来自yaml_parser。 我更改了标题,但仍然不知道导致问题的原因。

1 个答案:

答案 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');