Mac*_*ity 5 php timeout nfs amazon-web-services
所以我有一个有趣的情况,我不知道如何解决它.
我们有一个流程,可以综合查看我们的销售数据,然后通过Google Chart构建图表.为了避免锤击数据库(或谷歌),它每隔30分钟运行一次.它查看前一个文件以确定它是否达到了30分钟的阈值,如果是,则构建新文件.我们在负载均衡器后面有两台服务器.因此,两台服务器都必须能够访问相同的位置才能存储此文件.我们使用通过NFS挂载的EBS共享(我们的整个设置在AWS中)完成了此操作.这个过程很好.
问题是EBS共享有时很慢或断开连接.这会导致涟漪效应,在整个我们的内部工具中等待处理这个文件(除非你关闭通知).我已经阅读了几个关于stream_set_timeout的线程(比如这个),但是不清楚如何使用它来加载文件(它不是一个流)并且我一直无法找到任何示例.
这是一个片段,让您了解PHP文件正在做什么
$file = '/ebs/path/to/image.png';
$newfile=false;
if(!is_file($file)) $newfile=true;
elseif(filemtime($file)+1800 < time()) {
$newfile=true;
unlink($file);
}
if(!$newfile){
$i=imagecreatefrompng($file);
header('Content-Type: image/png');
header('Expires: ' . gmdate('D, d M Y H:i:s', filemtime($file) + $timeout) . ' GMT');
imagepng($i);
imagedestroy($i);
exit;
} else {
// Build and output a new file here
}
Run Code Online (Sandbox Code Playgroud)
我怎么能为这个脚本创建一个超时?
这比问题的答案更能解决问题,但是请iostat -x 1在服务器运行正常以及文件加载时间较长时发布输出。我发现,当速度avgqu-sz超过30时,即使在IOPS配置的驱动器(我们的驱动器配置为2000 IOPS)上,EBS也会缓慢爬行。解决的办法是在情况消除之前一两秒钟不对其进行读写。
另外,尝试克隆该卷,并使用克隆代替原始卷。我发现有些AWS系统只是“坏”的,需要更换:这适用于EC2实例,EBS卷,RDS服务等。可能是由于运气使您与另一个不是好邻居的用户一起使用运行VM的硬件。只需克隆资源并重新启动它,通常就可以将其移至其他硬件并解决此类问题。
编辑:阅读这篇关于如何解释iostat输出的精彩文章,重点放在iostat与EBS的关系上。我读过很多遍了。
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |