LNMP服务器,我部署在docker中,但服务器负载很高,帮我分析下?

clipboard.png
上面这张图显示speed只有56 page/min

负载一直都很高
clipboard.png
这是php日志

clipboard.png
都是get /index.php
是不是nginx重写也会增加服务器负载的

阅读 3.9k
4 个回答

很多php-fpm进程是状态D,估计是在等硬盘IO,你查一下硬盘看看。

重写能造成的负担很小,可以忽略, 但你的截图有点问题, 是不是请示结束了才运行的top吧?
重启机器,运行前,中,后分别用
cat /proc/stat
记录一下输出

$ cat /proc/stat
cpu 520529 3525 658608 3500749 210662 6650 29698 0 0
......

cpuN的含义从左到右分别是:user、system、nice、idle、iowait、irq、softirq,具体含义可以看文档。
下面还会有几行输出.
在下面几行中:
“intr”这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
“ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。
“btime”给出了从系统启动到现在为止的时间,单位为秒。
“processes (total_forks) 自系统启动以来所创建的任务的个数目。
“procs_running”:当前运行队列的任务的数目。
“procs_blocked”:当前被阻塞的任务的数目。

重点关注下iowait 看看不是这方面的问题,令外查一下不是网络请求(如数据库连接问题)的时间

  1. 和docker没什么关系
  2. 访问都是index.php是因为index.php是入口
  3. 重写增加不了多少负载
  4. 建议你运行的时候看开top看复杂,如果是php-fpm复杂大,那就是php程序需要优化了

同意楼上说法,很有可能跟 php-fpm 有关,
大量的 php-fpm 处于 D 状态。

D 状态:uninterruptible sleep

进程为什么会被置于uninterruptible sleep状态呢?

处于 uninterruptible sleep 状态的进程通常是在等待 IO ,比如磁盘 IO ,网络 IO ,其他外设 IO。如果大量进程处于此状态,可以检查一下是不是相关的 IO 设备出问题了,或者是程序里的 IO 操作有问题,比如:log 服务。

参考:

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题