![如何找出导致平均负载随机跳跃的原因?](https://linux22.com/image/488205/%E5%A6%82%E4%BD%95%E6%89%BE%E5%87%BA%E5%AF%BC%E8%87%B4%E5%B9%B3%E5%9D%87%E8%B4%9F%E8%BD%BD%E9%9A%8F%E6%9C%BA%E8%B7%B3%E8%B7%83%E7%9A%84%E5%8E%9F%E5%9B%A0%EF%BC%9F.png)
我的 Debian GNU/Linux 专用机的平均负载有问题。它们两个(其中两个)都运行 MySQL + 自定义游戏服务器软件 - 一个小型“MMORPG”(一点也不庞大)。CPU 使用率和内存使用率都还好。CPU 使用率通常小于 5%。RAM 使用率确实会上升到 80-90% 左右,但总是有一堆空闲的、缓存的或缓冲的。交换使用率为 0。
在使用 uptime、top 或任何其他显示负载的命令监控负载时,负载会随机跳升至 4 甚至更高。这显然是一个问题,尤其是考虑到两个盒子都“只有” 2 个核心。在平均负载出现神奇的跳跃之后,负载开始平稳下降,这表明资源使用率的跳跃真的是暂时的。每当我以 1 秒的更新频率盯着 top 大约 15 分钟时,CPU 使用率始终为 0-5%,最高为 10%。
我尝试了一些工具,例如 htop、vmstat、dstat 等,但都无济于事。以下是一份日志,供有兴趣的人参考:
http://www.k-zodron.com/log.txt
除了开头几行出现的情况外,CPU 使用率几乎没有上升,而负载却猛增到天文数字。我不是这方面的超级专家,但向磁盘写入 4KB 似乎也不可能是 I/O 瓶颈。
我还运行了 MySQL Tuning Primer Tool 并且它报告一切正常。
有什么想法可以追踪并解决该问题吗?谢谢!
编辑
http://www.k-zodron.com/munin/
Munin 统计数据,每 5 - 10 分钟更新一次。
答案1
mysql 是否正在使用临时表?您能添加一些带有 io stat 的 munin 图表吗?提供的日志中的 io 数字似乎低得令人难以置信。
您的工作集是什么 - 数据是否可以轻松地装入内存中 [似乎如此]?您是否不时对 SQL 进行大量写入 [从日志来看 - 根本没有]?
是否有可能突然出现并发请求数量激增的情况 [sql 或自定义服务器]? cat /proc/net/ip_conntrack|wc -l 显示了什么?负载峰值期间显示什么?
你能打开 mysql 吗慢查询日志- 例如一切>1或2秒?
您的磁盘是否直接连接到服务器,或者可能是 iscsi / nfs?您可以检查磁盘 [smart] / raid 状态的健康状态吗?也许其中一个驱动器出现故障...或者您可以在非高峰期运行简单的 io 磁盘基准测试,以确保获得不错的读/写速度。
或者也许 dmesg 中出现了一些不好看的东西?
编辑:检查 netstat |wc -l 是否与负载相关
检查 ps axms|wc -l 是否与负载相关
检查 lsof |wc -l 是否与负载相关
[ 最好破解小型 munin 插件,以便将它们放到图表上 ]。
答案2
您需要更多指标。我使用 ganglia 来收集不同的值,经典的指标有:cpu、内存、网络、磁盘 i/o 等;基于服务的指标:http 请求、mysql 查询和慢查询等;以及基于应用程序的指标,即有多少用户连接到游戏,或者应用程序调用关键函数的次数。
分析这些信息并与负载峰值进行比较可以让您更好地了解系统中发生的情况。