作为 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 -b---- 70030.7 # ps aux | grep blkback.
root 0.0 0.1 pts/ D+ : : grep blkback.
root 0.0 0.0 ? S< : [blkback..xvda]
root 0.0 0.0 ? S< : [blkback..xvdb]

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

# ionice -p  -c  -n 

使用 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  -c 

linux 使用 ionice 限制 Xen 虚拟机磁盘 IO的更多相关文章

  1. Linux按照CPU、内存、磁盘IO、网络性能监测

      系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书 ...

  2. Linux按照CPU、内存、磁盘IO、网络性能监测【转载】

    本文转载地址:https://my.oschina.net/chape/blog/159640 系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监 ...

  3. 云计算之路-试用Azure-飞流直下三千尺:实测虚拟机磁盘IO

    Azure的Temporary Storage(临时存储)磁盘的IO速度曾经是个传说,只知道它很快,但不知道究竟有多快.而Azure中国的情况怎么样,我们来实测一下. 测试环境:Azure上海机房,1 ...

  4. linux 查看CPU内存 网络 流量 磁盘 IO

    使用vmstat命令来察看系统资源情况 在命令行方式下,如何查看CPU.内存的使用情况,网络流量和磁盘I/O? Q: 在命令行方式下,如何查看CPU.内存的使用情况,网络流量和磁盘I/O? A: 在命 ...

  5. 一键获取linux内存、cpu、磁盘IO等信息脚本编写,及其原理详解

    更多linux知识,请关注公众号:一口Linux 一.脚本 今天主要分享一个shell脚本,用来获取linux系统CPU.内存.磁盘IO等信息. #!/bin/bash # 获取要监控的本地服务器IP ...

  6. MySQL 调优基础(四) Linux 磁盘IO

    1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...

  7. linux性能优化cpu 磁盘IO MEM

    系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...

  8. Linux 桌面玩家指南:07. Linux 中的 Qemu、KVM、VirtualBox、Xen 虚拟机体验

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  9. 巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度。

    巧用linux服务器的/dev/shm/ 巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度. 首先让我们认识一下,什么是tmpfs和/dev/shm/? ...

随机推荐

  1. SequoiaDB 系列之四 :架构简析

    在本系列的第一篇中,简述了SequoiaDB的安装,以及一个(伪)集群的部署 第二篇和第三篇对SequoiaDB的集群,做了简单地操作. 在本篇中,将对SequoiaDB的架构进行简单的分析. 因为自 ...

  2. python 中转义字符的注释

    文章转自:http://blog.sina.com.cn/s/blog_89e141170101cs73.html 转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \’ 单引号 \” 双引号 ...

  3. ASP.NET--GridView配合DetailsView初使用

    1.GridView与DetailsView中的绑定模板不可以进行编辑的问题 方法:将要编辑的列转换为模板列---TemplateField <EditItemTemplate></ ...

  4. codevs 1690 开关灯 线段树水题

    没什么好说的,标记put表示开关是否开着. #include<cstdio> #include<cstring> #include<algorithm> using ...

  5. 让js的forin循环禁止forin到某个属性的话要怎么做

    //知识点1:for In循环是可以枚举到继承的属性的://知识点2:使用defineProperty让属性无法通过forIn枚举到://知识点3:用definedProperty重新定义一个属性药把 ...

  6. Cocos2d-X3.0 刨根问底(五)----- Node类及显示对象列表源码分析

    上一章 我们分析了Cocos2d-x的内存管理,主要解剖了 Ref.PoolManager.AutoreleasePool这三个类,了解了对象是如何自动释放的机制.之前有一个类 Node经常出现在各种 ...

  7. BZOJ-1854 游戏 二分图匹配 (并查集)

    1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 3372 Solved: 1244 [Submit][Status] ...

  8. jquery中的prop和attr比较区别

    近期和一同事争执prop和attr的区别,也查了很多,同事说它只是特性和固有属性的区别,但是我也查到了一些其他的,故此,来总结一下吧! 1.固有属性和特别属性 对于HTML元素本身就带有的固有属性,在 ...

  9. nginx配置ssl双向验证 nginx https ssl证书配置

    1.安装nginx 参考<nginx安装>:http://www.ttlsa.com/nginx/nginx-install-on-linux/ 如果你想在单IP/服务器上配置多个http ...

  10. 多一个“点”给IIS与ASP.NET带来的问题

    [IIS] 一个网站如果用的是IIS(假设没有在前端7层负载均衡中对这种场景进行特殊处理),只要在浏览器地址栏中输入这个网站的域名并加上“.”,比如:www.cnblogs.com. ,就会引发“Ba ...