如何解决PHP网站冻结/崩溃,但静态内容正常
我有一个PHP网站,用户可以在其中上传很多照片。照片在前端裁剪,并以POST形式作为base64发送。最大大小约为80kB。
JavaScript:
document.getElementById('image').src = dataurl; To display croped image on the browser
document.getElementById('inddeninput').value = dataurl; To set hidden input value
然后调用ajax提交到PHP
axios({
method: 'post',url: `url/to/php/file`,data: formData,headers: {'Content-Type': 'multipart/form-data' }
})
PHP脚本:
$img = $_POST['img'];
$dataImg = base64_decode($img);
file_put_contents($fileLocation,$dataImg);
然后使用图像的位置插入/更新MySQL(Mariadb)表。
$response = location of the image;
echo json_encode($response);
托管:
它托管在具有4CPU和8GB的VPS上。运行mpm_event的PHP 7.4和Apache 2.4。
问题
如果用户较少,一切都会很好。
当并发用户很多(大约400个)时,整个站点非常慢,需要30秒或更长时间来响应。但是,没有Apache错误日志,没有站点错误日志,什么也没有,如果我重新启动Apache几分钟,就可以了。
如果我尝试从站点(mydomain.com/public/images/img.1.jpg)加载图像之类的静态文件,则速度非常快,而且不到一秒钟。
我可以尝试解决什么问题?
编辑
经过大量挖掘,我在/var/log/php7.4-fpm.log中找到了问题
[pool www] server reached pm.max_children setting (96),consider
raising it
这是php_fpm模块的子连接。我之前有以下设置:
pm.max_children = 96
pm.start_servers = 48
pm.min_spare_servers = 32
pm.max_spare_servers = 64
我的许多用户的连接速度都很慢,我猜随后的请求进入了队列。我增加了价值,情况有所改善。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。