Java 性能调优工具箱之操作系统的工具和分析 (二)

本贴最后更新于 2063 天前,其中的信息可能已经水流花落
  1. 磁盘使用率

    监控磁盘使用率有两个目的:第一个目的与应用有关。如果应用正在做大量的磁盘 I/O 操作,那 I/O 就很容易称为瓶颈;第二个目的是即使预计应用不会有很高的 I/O,有助于监控系统是否在进行内存交换。

    想了解何时磁盘 I/O 是瓶颈非常困难,因为这取决于应用的行为。如果应用往磁盘写数据时,没有有效的缓冲,磁盘 I/O 的统计数据就会非常低。但是,如果应用执行的 I/O 超过了磁盘的承载,磁盘 I/O 的统计数据就会非常高。这两种情形的性能都需要提升。

    这是 Linux 系统 iostat 的部分输出:
    5dc8b1392b2f6b2b2d240c72.png

    avg-cpu 字段说明:

    字段名 字段名解释
    %user CPU 处在用户模式下的时间百分比
    %nice CPU 处在带 NICE 值的用户模式下的时间百分比
    %system CPU 处在系统模式下的时间百分比
    %iowait CPU 等待输入输出完成时间的百分比
    %steal 管理程序维护另一个虚拟处理器时,虚拟 CPU 的无意识等待时间百分比
    %idle CPU 空闲时间百分比

    device 字段说明:

    字段名 字段名解释
    rrqm/s 每秒这个设备相关的读取请求有多少被 Merge 了(当系统调用需要读取数据的时候,VFS 将请求发到各个 FS,如果 FS 发现不同的读取请求读取的是相同 Block 的数据,FS 会将这个请求合并 Merge)
    wrqm/s 每秒这个设备相关的写入请求有多少被 Merge 了
    r/s 每秒向磁盘发起的读操作数
    w/s 每秒向磁盘发起的写操作数
    rMB/s 每秒读 M 字节数
    wMB/s 每秒写 M 字节数
    avgrq-sz 平均每次设备 I/O 操作的数据大小
    avgqu-sz 平均请求队列的长度,队列长度越短越好。
    await 平均每次设备 I/O 操作的等待时间 (毫秒),一般地,系统 I/O 响应时间应该低于 5ms,如果大于 10ms 就比较大了
    r_await 每个读操作平均所需的时间;不仅包括硬盘设备读操作的时间,还包括了在 kernel 队列中等待的时间
    w_await 每个写操作平均所需的时间;不仅包括硬盘设备写操作的时间,还包括了在 kernel 队列中等待的时间
    svctm 平均每次设备 I/O 操作的服务时间 (毫秒)(这个数据不可信)
    %util 一秒中有百分之多少的时间用于 I/O 操作,即被 IO 消耗的 CPU 百分比,一般地,如果该参数是 100% 表示设备已经接近满负荷运行了

    性能监控指标:

    • %iowait:如果该值较高,表示磁盘存在 I/O 瓶颈

    • await:一般地,系统 I/O 响应时间应该低于 5ms,如果大于 10ms 就比较大了

    • avgqu-sz:如果 I/O 请求压力持续超出磁盘处理能力,该值将增加。如果单块磁盘的队列长度持续超过 2,一般认为该磁盘存在 I/O 性能问题。需要注意的是,如果该磁盘为磁盘阵列虚拟的逻辑驱动器,需要再将该值除以组成这个逻辑驱动器的实际物理磁盘数目,以获得平均单块硬盘的 I/O 等待队列长度

    • %util:一般地,如果该参数是 100% 表示设备已经接近满负荷运行了

    小结

    • 对于所有应用来说,监控磁盘使用率非常重要。即便不直接写磁盘的应用,系统交换仍然会影响它们的性能。

    • 写入磁盘的应用遇到瓶颈,是因为写入数据的效率不高(吞吐量太低),或者是因为写入太多数据(吞吐量太高)

  2. 网络使用率

    如果应用运行时需要网络,比如 Java EE 应用服务器,你也必须监控网络流量。网络使用率类似磁盘流量。应用可能没有充分利用网络所以带宽太低,或者写入某网络接口的总数据量超过了它所能处理得量。

    有许多开源和商业工具可以监控网络带宽。Unix 里一个受欢迎的命令行工具就是 nicstat,它可以显示每个网络接口的流量概要,包括接口的使用度。

    nicstat 工具的安装

    下载地址: https://sourceforge.net/projects/nicstat/

    下载后安装

    tar -zxvf nicstat-1.95.tar.gz
    cd nicstat-1.95/
    cp Makefile.Linux Makefile

    注意 :Makefile 里面默认是用 32 位系统下编译的,需要修改成 64 位。

    vi Makefile

    将 CFLAGS = (COPT) (CMODEL) 修改为 CFLAGS = $(COPT)

    make
    make install

    这是 Linux 系统 nicstat 的输出
    5dc8bebb38e8ae64946e6e43.png

    字段名 字段名解释
    Int 网络接口设备名
    rKB/s 每秒读取 kb 数
    wKB/s 每秒写入 kb 数
    rPk/s 每秒读取的包数
    wPk/s 每秒写入的包数
    rAvs 每次读取平均字节
    wAvs 每次写入平均字节
    %Util 网络接口使用率
    Sat 饱和度

    在做性能压测的时候,最关键看网络接口使用率和饱和度。

    小结:

    1. 对基于网络的应用来说,务必要监控网络以确保它不是瓶颈

    2. 往网络写数据的应用遇到瓶颈,可能是因为写数据的效率太低(吞吐量太低),也可能是因为写入了太多数据(吞吐量太高)

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8217 回帖 • 1 关注
  • 网络
    140 引用 • 184 回帖 • 4 关注
  • 磁盘使用率
    1 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
AutisticV5
简单很快乐,快乐很简单。 佛山

推荐标签 标签

  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 248 回帖 • 1 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 508 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 179 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    53 引用 • 190 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1444 引用 • 10083 回帖 • 503 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    89 引用 • 1251 回帖 • 392 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    229 引用 • 476 回帖
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖 • 1 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 466 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    63 引用 • 289 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    196 引用 • 1399 回帖
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 67 回帖 • 445 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 2 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    10070 引用 • 45749 回帖 • 67 关注
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    209 引用 • 2040 回帖
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 522 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 732 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8217 回帖 • 1 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 233 回帖 • 3 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 2 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    35 引用 • 468 回帖 • 768 关注