我有一台服务器运行ubuntu 12.04并托管我的postgresql 9.2数据库.服务器在Hetzner.de上,它是一个EX6s(使用ubuntus软件raid在RAID1设置中使用32Gb ram和两个3T HDD的8核xenon).
当我运行大量查询(我经常在晚上完成)时,我发现几乎所有的cpu使用都花在cpu I / O等待上.我安装了新的文件监视器,我似乎无法找到任何其他迹象表明这可能是cpu I / O等待的根本原因,这显然是我的性能和吞吐量的瓶颈.
所以问题是,这个cpu I / O等待的是什么以及它还在等待什么?
我添加了所有概述图表,我可以从下面的新遗物中抓住.我在俯瞰什么?一定有明显的瓶颈吗?我应该去哪里潜水?
数据库服务器cpu使用情况 – 告诉我一些错误的恶意
https://rpm.newrelic.com/public/charts/cEdIvvoQZCr
数据库服务器负载平均
https://rpm.newrelic.com/public/charts/cMNdrYW51QJ
数据库服务器物理内存
https://rpm.newrelic.com/public/charts/c3dZBntNpa1
数据库服务器磁盘I / O优化 – 正如您所看到的,磁盘似乎没有得到太多利用(几乎没有)
https://rpm.newrelic.com/public/charts/9YEVw6RekFG
数据库服务器网络I / O(Mb / s) – 网络是千兆位内部网络,可以进行所有通信.
https://rpm.newrelic.com/public/charts/lKiZ0Szmwe7
按挂钟时间排名前5位的数据库操作
https://rpm.newrelic.com/public/charts/dCt45YH12FK
数据库吞吐量
https://rpm.newrelic.com/public/charts/bIbtQ1mDzMI
数据库响应时间
https://rpm.newrelic.com/public/charts/fPcNL8WA6xx
更新:
在做了sudo iostat -k 1后,我开始怀疑了.
我得到了很多这样的输出,我在NR中看不到:
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.00 0.00 0.00 0 0 sdb 0.00 0.00 0.00 0 0 sdc 546.00 2296.00 6808.00 2296 6808 sdd 593.00 1040.00 7416.00 1040 7416 md1 0.00 0.00 0.00 0 0 md0 0.00 0.00 0.00 0 0 md2 1398.00 3328.00 13064.00 3328 13064 md3 0.00 0.00 0.00 0 0
当进程处于iowait时,这意味着它们已发出IO请求,并正在等待该请求的结果.如果有足够的RAM,大部分工作集将被缓存在RAM中,因此,读取不会导致大部分IO争用,因此写入通常是罪魁祸首.
关于您的磁盘IO图,我怀疑New Relic由于某种原因没有正确收集IO指标.我建议可能会查看像Munin这样的辅助数据收集系统.除此之外,您可以通过发出以下命令实时查看磁盘IO:
$iostat -k 1
这将输出实时磁盘读写,以kbps为单位.我怀疑你会看到New Relic没有看到的相当多的活动.