共计 717 个字符,预计需要花费 2 分钟才能阅读完成。
导读 | 问题:本地的 web 站需要用到 elasticsearch 服务。当 php 使用本地服务器搭建的 elasticsearch 时,本地的负载都是正常。当我使用 aws 的 elasticsearch service 服务时,本地服务器出现负载经常过高的情况。查看 nginx 和 php 日志,发现没有异常。系统的并发连接数也不高。这时候想到我们老大给我讲的一个 strace 诊断工具。 |
本地环境:redhat6.7 系统。nginx1.12.1,php7.1.0,代码使用 yii2 框架
问题:本地的 web 站需要用到 elasticsearch 服务。当 php 使用本地服务器搭建的 elasticsearch 时,本地的负载都是正常。当我使用 aws 的 elasticsearch service 服务时,本地服务器出现负载经常过高的情况。查看 nginx 和 php 日志,发现没有异常。系统的并发连接数也不高。这时候想到我们老大给我讲的一个 strace 诊断工具。
调试过程:
- 查找一个 php 的子进程 id
- strace -cp pid 跟踪进程的调用
系统当时的负载:
strace 调试过程
这边就发现 php 调用 elasticsearch 的时候,会去本地找一个文件,这个文件是不存在的。从而导致服务器负载偏高。通过对比 aws elasticsearch 和本地 es 集群的区别。发现只有调用的方法不一样。代码里面是用 https 的方法调用的,所以他会去本地找这个证书库文件。我立即联系开发,把调用方式改成 http 之后,观察一段时间,服务器负载恢复正常了。
strace -T -e access -p 1379
正文完
星哥玩云-微信公众号