海运的博客

XenServer通过ionice限制VM虚拟机硬盘IO

发布时间:June 8, 2013 // 分类:虚拟化 // 1 Comment

之前有文章介绍Xen下通过ionice限制VM虚拟机硬盘IO优先级XenServer获取虚拟机进程和Xen不同,可通过以下方法查找虚拟机IO进程,并使用ionice限制。
首先获取VM虚拟机的UUID:

xe vm-list name-label=<vm-name> --minimal

然后再获取VM的DOM ID:

list_domains |awk '/<vm-uuid>/ {print $1}'

通过DOM ID获取VM相对应的进程ID:

ps aux|grep xb.*<dom-id>.xvd
root     10995  0.0  0.0      0     0 ?        S    10:08   0:01 [xb.00003.xvda]
root     10996  0.0  0.0      0     0 ?        S    10:08   0:00 [xb.00003.xvdd]

使用ionice调整相应进程的IO优先级策略即可。

Xen限制VM虚拟机磁盘IO

发布时间:June 8, 2013 // 分类:虚拟化 // No Comments

作为VPS服务商我们需要保证每个VPS公平的使用 host(服务器)的资源,避免某个VPS因为程序死循环、挂起、滥用等因素 “拖累”其他VPS,如果出现这个情况如何临时限制这个VPS的磁盘IO呢?有个办法是通过通过修改每个虚拟机CPU权重的办法间接、不精确的限制 IO. 在 Linux 上限制资源(CPU、内存、IO 等)的通常办法是用 cgroups,不过今天介绍的 ionice 要更容易一些。

首先找到哪个虚拟机(VPS)正在大量IO(假设是 vps0001),找到这个虚拟机后用xm list查出这个虚拟机使用的 ID 号,然后用ID配上blkback(blkback.24)找出这个虚拟机(通过Xen的 blkback 驱动)关联哪些硬盘(blkback.24.xvda 和 blkback.24.xvdb),以及所使用的进程号(25089 和 25090):

# xm list vps0001
Name                                      ID Mem(MiB) VCPUs State   Time(s)
vps0001                                   24     1024     2 -b----  70030.7

# ps aux | grep blkback.24
root      7434  0.0  0.1  61172   768 pts/16   D+   02:48   0:00 grep blkback.24
root     25089  0.0  0.0      0     0 ?        S<    2012   0:00 [blkback.24.xvda]
root     25090  0.0  0.0      0     0 ?        S<    2012   0:00 [blkback.24.xvdb]

找到进程号后我们就可以 ionice 了:

ionice -p 25089 -c 2 -n 7

使用 ionice 之前查一下帮助文件,-c 是指定调度类型,这里选择的是 2,best-effort;-n 指定调度优先级,0 最高,7最低;-p 是指定进程号:

OPTIONS
-c The scheduling class. 1 for real time, 2 for best-effort, 3 for
idle.

-n The scheduling class data. This defines the class data, if the
class accepts an argument. For real time and best-effort, 0-7 is
 valid data.

-p Pass in a process pid to change an already running process. If
this argument is not given, ionice will run the listed program
with the given parameters. 

ionice 把磁盘 IO 调度分成三类:

real time 实时调度,设置后立即访问磁盘,不管系统中其他进程是否有 IO,可能会使得其他进程处于等待状态,不能用在这里;
best effort 默认调度,可以指定调度优先级(从0到7,数值越小、优先级越高);同一优先级的进程采用 round-robin 算法调度;
idle 空闲调度,只有当前系统没有其他进程磁盘 IO 时,才能进行磁盘 IO.

额,如果太过分,我们就把这个进程的调度改成 idle,这样会极大降低这个虚拟机的 IO,虚拟机只能保持基本可用状态,不推荐~

ionice -p 25089 -c 3

原文:http://www.vpsee.com/2013/06/using-ionice-to-mediate-xen-vm-disk-io/

类似top的硬盘读写IO监控工具iotop

发布时间:August 19, 2012 // 分类:系统监控 // No Comments

Debian及Centos下可直接安装iotop:

apt-get install iotop
yum install iotop

iotop使用参数:

  -o 只显示有IO读写的进程
  -b #非交互模式
  -n #显示次数
  -d #刷新间隔
  -p #只显示指定pid的进程
  -u #只显示特定用户的进程
  -P #不显示线程
  -a #显示累积的数据
  -k #使用kB为单位,默认字节
  -t #显示时间

iotop界面如下:
iotop.png

Linux禁止atime提高IO性能

发布时间:July 17, 2012 // 分类:系统调优 // No Comments

Linux服务器当访问文件或目录的时候会同步更新atime,如果服务器业务较大会给磁盘带来很大的负担,可以修改挂载参数不写入访问时间。

cat /etc/fstab
/dev/VolGroup00/LogVol00 /                       ext3    defaults,noatime,nodiratime        1 1

重新挂载磁盘分区:

mount -o remount /

查看当前挂载参数:

 mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw,noatime,nodiratime)

Linux服务器用iostat监测硬盘I/O性能

发布时间:May 4, 2012 // 分类:系统调优 // No Comments

iostat使用语法:

iostat [ -c | -d] [ -k ] [ -t ] [ -x [device] ] [ <interval> [ <count> ] ]

使用参数:

-c 显示CPU的使用情况
-d 显示磁盘的使用情况
-k 以K为单位输出
-m 以M为单位输出
-t 显示执行时间
-x 更为详细的输出
interval 指定间隔时间
count 指定统计次数

iostat应用示例:

iostat -x 2 2 #统计2次,间隔2秒
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.04    0.00    1.55    0.00    0.00   97.41

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    36.79  0.00  7.25     0.00   352.33    48.57     0.00    0.50   0.50   0.36
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00    36.79  0.00  7.25     0.00   352.33    48.57     0.00    0.50   0.50   0.36
dm-0              0.00     0.00  0.00 44.04     0.00   352.33     8.00     0.04    0.86   0.08   0.36
dm-1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
hdc               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

iostat参数说明:

Blk_read/s:每秒钟块设备写入块的数量,每块一般是4096字节
Blk_wrtn/s :每秒钟块设备读取块的数量
tps:每秒磁盘连续读次数和连续写次数之和
rrqm/s:每秒进行合并的读操作数目
wrqm/s:每秒进行合并的写操作数目
r/s:每秒完成读IO的次数
w/s:每秒完成写IO的次数
rsec/s:每秒读扇区数,每扇区512字节
wsec/s:每秒写扇区数,每扇区512字节
rkB/s:每秒读千字节数
wkB/s:每秒写千字节数
avgrq-sz:平均每次IO操作的数据大小(扇区),即(rsec/s+wsec/s)/(r/s+w/s)。
avgqu-sz:平均IO队列的长度
await:平均每次IO操作的等待时间,单位毫秒
svctm:平均每次IO操作的服务时间,单位毫秒
%util:一秒中有百分之多少的时间用于IO操作,即(r/s+w/s)*(svctm/1000)。

总结:

如果%util较大代表IO请求太多,硬盘可能存在瓶颈。
如果avctm比较接近await,说明IO几乎没等待时间。
如果await远大于avctm,说明IO队列太长,应用响应时间也变长。
avgqu-sz队列长度也可衡量IO负荷的指标,avgqu-sz是单位时间内的平均值。
其它还可参考vmstat结果b参数(等待资源的进程数)和wa参数(IO等待所占用CPU时间百分比)。
分类
最新文章
最近回复
  • 海运: proxy-header或proxy_protocol
  • liangjw: 如果是 内部调用 或者 中间存在 代理 而上一个代理又在内网 ,那怎么处理来自代理私有IP?
  • chainofhonor: 感谢,用dnsmasq设置自动判断BIOS和UEFI成功了
  • 海运: 不好意思,这个是很多年前的,现在也许已经不适用,我现在也不用多线了。
  • CQ: -m state --state NEW 替换成-m conntrack --ctstate NEW
  • CQ: 你好,我入站已经成功分流,但是不知道出站怎么设置,PREROUTING替换成POSTROUTI...
  • K: 好的,谢谢,我去试试!
  • 海运: 可以试试3proxy
  • daha: PHP的怎么使用???
  • 海运: 换回了5.3内核,5.8用5.3 dtb虽然能开机且负载正常,但也有其它问题,不建议使用。