我的一台服务器遇到了一个独特的问题。过去几周,磁盘 I/O 统计数据一直在增加。请参见 Munin 的以下图表:
从 Linode 的仪表板上,我可以看到更详细的磁盘 I/O 图片。这是周期性/节奏图(一天间隔)。但请注意,尽管它看起来是周期性的,但在几周的时间内,平均磁盘 I/O 一直在持续增加(见上图):
现在,我做了iotop
并看到这kjournald
是唯一一个为磁盘 I/O 执行写入的进程(除了偶尔的情况rsyslogd
——但磁盘 I/O 的频率kjournald
要高得多)。在上面的图表中,I/O 的读取部分实际上为零。
为什么kjournald
在没有其他进程写入的情况下也会写入?为什么写入的大小每天都在变大?
另一个线索是:空闲内存也在单调减少,而“缓冲区”在增加。参见以下图表:
PS:服务器仅是 Apache。访问日志已禁用,但错误日志已启用。每秒处理约 80 个请求。我们使用Redis作为队列。我的磁盘正在使用扩展。
答案1
由于我不知道你的服务器在做什么,所以在黑暗中胡乱猜测:
您的服务器是 Web 服务器吗?也许它有一个经常访问的页面,该页面将访问记录到常规文本文件(或者可能是 SQLite 后端?)中,并且每次页面加载时,PHP 脚本都会解析此文件并记录对此文件的访问?然后,此文件会不断增长,写入量也会不断增加。
虽然这似乎不太可能,因为您没有观察到任何 httpd 进程。无论如何,也许发生了类似的事情?一些定期分析的文件正在不断增长?
编辑:你已经尝试过一个非常方便的工具黑踪? 有了它,您可以跟踪 I/O 并查看哪些进程正在访问磁盘以及原因。尝试btrace /dev/sda
或无论您的磁盘是什么。btrace
命令至少在 Debian/Ubuntu 中与软件包捆绑在一起blktrace
,如果它尚未为您安装。
答案2
首先,我总是对查看监测频率太低的数据感到困扰,因为在采样周期之间经常隐藏着一些非常有用的信息。然而,这可能不一定是问题。
无论如何,一个计数器很少能说明全部情况。由于您的每日图表确实显示白天略有增加,至少事物变化得足够快,可以看到变化。由于图表不够精细,您无法从中看出事物是平稳变化还是阶跃变化?一个值是否在 50 秒内保持平稳然后跳跃?您无法判断,如果有跳跃,您需要能够将其与其他系统测量值关联起来。
我建议安装 collectl 并让它运行几个小时。然后使用 collectl-utils 的一部分 colplot,您可以获得 cpu、磁盘、网络、内存、nfs、tcp、套接字以及可能还有一两件我忘记的事情的详细图表(间隔 10 秒)。您还可以深入了解您的 slab 和进程的情况。
现在,您可以查看这些图,并且比使用 rrdtool 获得的图更详细地查看。当然,如果图中的某些内容看起来很有趣,您也可以重播收集的带时间戳的文本并深入研究它。
-标记