linux的iostat和内存部分原理

安装方法:

1)使用mount查看安装的IOS镜像文件挂在载那个目录下
2)进入到对应目录下,下面是我的挂载路径
/media/RHEL_5.4 i386 DVD/Server
3)使用rpm -ivh sysstat-7.0.2-3.el5.x86_64.rpm 进行安装

  • 二:安装完运行:iostat
  • iostat -d -m 5

参数 -d 表示,显示设备(磁盘)使用状态;-m某些使用block为单位的列强制使用m为单位;5表示,数据显示每隔5秒刷新一次。
[root@localhost Server]# iostat -d -m 2
Linux 2.6.18-164.el5 (localhost.localdomain) 03/19/2016

Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 9.10 0.11 0.03 491 120
sda1 0.05 0.00 0.00 1 0
sda2 9.03 0.11 0.03 489 120
sda3 0.01 0.00 0.00 0 0
sr0 0.00 0.00 0.00 0 0
sr1 0.06 0.00 0.00 0 0
tps:每秒传输的多少次
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;
kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes

  • iostat -d sda 2监控指定硬盘
    [root@localhost Server]# iostat -d sda
    Linux 2.6.18-164.el5 (localhost.localdomain) 03/19/2016

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 8.71 215.43 53.27 1006254 248829

  • -x 参数

iostat还有一个比较常用的选项-x,该选项将用于显示和io相关的扩展数据。

iostat -d -x -k 1 10
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 1.56 28.31 7.80 31.49 42.51 2.92 21.26 1.46 1.16 0.03 0.79 2.62 10.28
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 2.00 20.00 381.00 7.00 12320.00 216.00 6160.00 108.00 32.31 1.75 4.50 2.17 84.20

输出信息的含义

复制代码
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。

rsec/s:每秒读取的扇区数;
wsec/:每秒写入的扇区数。
rKB/s:The number of read requests that were issued to the device per second;
wKB/s:The number of write requests that were issued to the device per second;
avgrq-sz 平均请求扇区的大小
avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。
await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
svctm 表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长, 系统上运行的应用程序将变慢。
%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

后面补充一下我以前的一些疑惑:
1 读取数据库数据是读取的内存还是硬盘的数据?
答:读取数据库数据就是读取的内存数据,因为现在硬盘读取时单线程的,如果两个人同时去查询同一张表,在数据库层面是允许并发的,但是在硬盘上,却是要排队的。所以必须是前面一个人查询出结果,后面一个人才能取数据。
解决方法:1 )数据库内存技术,对于经常查询的数据可以先加载到内存中,等待读取
2) 数据分区,保存到不同的磁盘这样,就可以防止同时访问同一个硬盘
网络资源地址:
http://blog.csdn.net/dyllove98/article/details/9336501
2 数据库的数据怎么加载到内存?
答:其实不要把内存看作是一个特殊的东西,把其当作一个磁盘和CPU中间的一个磁盘而已,只不过这个磁盘的读取速度比磁盘快多了,因为寻址方式不一样。这样计算机有了内存技术,速度也大大提升了。
3 程序退出了,内存会释放吗?
答:程序退出了,内存就会被系统慢慢释放掉,系统有内存清理机制,
就算是new出来的程序中没有释放,程序停止后也会释放的。但是new出来的对象没用后,程序员都应该手动释放掉,像C语言如果不释放,长时间运行必然会有内存不足。java程序虽然jvm有垃圾回收机制,但是如果超出了垃圾回收机制的范围也会经常出现内存不足
4 内存溢出和内存泄漏
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。

内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。

memory leak会最终会导致out of memory!

内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。
内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。这就是溢出!比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出.
以发生的方式来分类,内存泄漏可以分为4类:

1.) 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
2. )偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
3. )一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
4. )隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。

部分转用:
http://blog.csdn.net/buutterfly/article/details/6617375
http://blog.csdn.net/dyllove98/article/details/9336501
http://blog.csdn.net/supersaint/article/details/7713327

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值