8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

描述

使用系统命令top即可看到如下类似信息:1Cpu(s): 0.0%us, 0.5%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

us 用户空间占用CPU百分比

sy 内核空间占用CPU百分比

ni 用户进程空间内改变过优先级的进程占用CPU百分比

id 空闲CPU百分比

wa 等待输入输出的CPU时间百分比

hi 硬件中断

si 软件中断

st: 实时

linux用很多可用的工具可以用来发现排错,有些很容易使用,有些用法则比较高级

查看I/O wait问题不仅需要使用一些高级工具,也需要一些基本工具的高级用法。I/O wait之所以难以排查是因为默认有太多的工具告诉你系统I/O阻塞,但没那么多工具可以帮你缩小范围以便确定出是哪个或哪些进程引起的问题。

首先回答是不是I/O引起系统缓慢

确定是不是I/O引起系统缓慢,你可以使用很多工具但最简单的还是unix命令top1

2

3

4

5

6top - 14:31:20 up 35 min, 4 users, load average: 2.25, 1.74, 1.68

Tasks: 71 total, 1 running, 70 sleeping, 0 stopped, 0 zombie

Cpu(s): 2.3%us, 1.7%sy, 0.0%ni, 0.0%id, 96.0%wa, 0.0%hi, 0.0%si, 0.0%st

Mem: 245440k total, 241004k used, 4436k free, 496k buffers

Swap: 409596k total, 5436k used, 404160k free, 182812k cached

从CPU(s) 这行你可以看出当前CPU I/O Wait的情况;越高的wa表示越多的cpu资源在等待I/O1

2wa -- iowait

Amount of time the CPU has been waiting for I/O to complete. //cpu已经等待I/O完成的时间

查找哪个硬盘正在被写入

上面的top命令从系统面大体展示了I/O Wait,但它没有告诉你哪个硬盘正在被影响;为此我们需要使用iostat命令1

2

3

4

5

6

7

8[[email protected] ~]# iostat -x 2 5

avg-cpu: %user %nice %system %iowait %steal %idle

3.66 0.00 47.64 48.69 0.00 0.00

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util

sda 44.50 39.27 117.28 29.32 11220.94 13126.70 332.17 65.77 462.79 9.80 2274.71 7.60 111.41

dm-0 0.00 0.00 83.25 9.95 10515.18 4295.29 317.84 57.01 648.54 16.73 5935.79 11.48 107.02

dm-1 0.00 0.00 57.07 40.84 228.27 163.35 8.00 93.84 979.61 13.94 2329.08 10.93 107.02

上述示例的iostat命令将每2秒打印出报告,共打印5次;-x参数告诉iostata打印出更详尽的报告

iostat打印出的第1个报告,数值是基于最后一次系统启动的时间统计的;基于这个原因,在大部份情况下,iostat打印出的第1个报告应该被忽略。每个子报告都是基于上1次的报告。在这个例子中,我们的命令将打印5次报告,第2份报告就是从第1份报告开始后的硬盘数据,第3份报告基于第2份,依此类推。

上述示例,sda盘的%utilized达到了111.41%。这表示引起I/O慢的进程在写入sda盘。因为我这个测试实例中只有1个硬盘,但对于有多硬盘的服务器来说,这可以缩小在使用I/O的进程范围。

除了iostat的%utilized能提供丰富的信息外,像rrqm/s、wrqm/s这些每秒读、写的请求数,r/s、w/s每秒读写数也很有用。在我们的例子中,我们的程序看起来读写很繁重的信息也能帮助我们确定这个讨人厌的进程。

查找引起高I/O的进程

iotop1

2

3

4Total DISK READ: 8.00 M/s | Total DISK WRITE: 20.36 M/s

TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND

15758 be/4 root 7.99 M/s 8.01 M/s 0.00 % 61.97 % bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

查看哪个进程使用硬盘最多的最简单的方法就是使用iotop命令。通过查看数据,我们很容易就能确定是bonnie++这个进程引起我们机器高I/O

虽然iotop好用,但默认主流的linux发行版中是没有安装的;并且我个人也不推荐依赖默认系统没有安装的命令。系统管理员总是会碰到这样的情况,他们没办法在短时间内简单地安装这些非默认包。

如果iotop没办法用,以下的步聚还是可以帮助你缩小这些讨人厌进程的范围

进程状态列表

ps命令能打印出内存,cpu的情况但没办法打印出硬盘I/O的情况。虽然ps没办法打印出I/O的情况,但它可以显示出进程是否在等待I/O。

The ps state field provides the processes current state; below is a list of states from the man page.

ps状态列提供了进程当前的状态,以下从man ps上获取的进程stat列表1

2

3

4

5

6

7

8PROCESS STATE CODES

D uninterruptible sleep (usually IO)

R running or runnable (on run queue)

S interruptible sleep (waiting for an event to complete)

T stopped, either by a job control signal or because it is being traced.

W paging (not valid since the 2.6.xx kernel)

X dead (should never be seen)

Z defunct ("zombie") process, terminated but not reaped by its parent.

等待I/O的进程通过处于uninterruptible sleep或D状态;通过给出这些信息我们就可以简单的查找出处在wait状态的进程

示例:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15[[email protected] ~]# for x in `seq 1 1 10`; do ps -eo state,pid,cmd | grep "^D"; echo "----"; sleep 5; done

D 248 [jbd2/dm-0-8]

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

----

D 22 [kswapd0]

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

----

D 22 [kswapd0]

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

----

D 22 [kswapd0]

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

----

D 16528 bonnie++ -n 0 -u 0 -r 239 -s 478 -f -b -d /tmp

----

上述命令会每5秒循环打印出位于D状态的进程,共打印10次

从上面的输出可以看出bonnie++,pid 16528比其它进程更加占用I/O。从这点,bonnie++看起来更有可能引起I/O Wait。但仅凭进程处于uninterruptible sleep state誊,还不能完全确定就是这引起的I/O wait。

为了帮助肯定我们的怀疑,我们可以使用/proc文件系统。在这个进程目录里,每个进程都有一个io文件,里面的数值跟iotop命令获取的I/O数值一样。1

2

3

4

5

6

7

8[[email protected] ~]# cat /proc/16528/io

rchar: 48752567

wchar: 549961789

syscr: 5967

syscw: 67138

read_bytes: 49020928

write_bytes: 549961728

cancelled_write_bytes: 0

read_bytes和write_bytes就这个进程读写硬盘的字节数。在这里,bonnie++已经读取了46MB,写入524MB的数据。对很多进程,这可能不是很多,但在我们这个实例这足够引起高i/o wait。

查找哪个文件在被繁重地写入

lsof命令会为你展示指定进程打开的所有文件或依赖提供选项的所有进程。从这个列表,人们可以根据文件的大小和/proc io文件里出现的次数做出有用的猜测,哪个文件正在被频繁地写入。

为了减少输出的内容,我们可以使用-p 选项来只打印指定进程id打开的文件1

2

3

4

5

6

7

8

9[[email protected] ~]# lsof -p 16528

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

bonnie++ 16528 root cwd DIR 252,0 4096 130597 /tmp

bonnie++ 16528 root 8u REG 252,0 501219328 131869 /tmp/Bonnie.16528

bonnie++ 16528 root 9u REG 252,0 501219328 131869 /tmp/Bonnie.16528

bonnie++ 16528 root 10u REG 252,0 501219328 131869 /tmp/Bonnie.16528

bonnie++ 16528 root 11u REG 252,0 501219328 131869 /tmp/Bonnie.16528

bonnie++ 16528 root 12u REG 252,0 501219328 131869 /tmp/Bonnie.16528

为了更进一步确认是这些文件被繁重地写入,我们可以看下/tmp文件系统是不是sda盘的一部份。1

2

3Filesystem 1K-blocks Used Available Use% Mounted on

/dev/mapper/workstation-root 7667140 2628608 4653920 37% /

从df的输出我们可以判断出/tmp是根目录下的一部份。1

2

3

4

5

6

7

8

9

10

11--- Physical volume ---

PV Name /dev/sda5

VG Name workstation

PV Size 7.76 GiB / not usable 2.00 MiB

Allocatable yes

PE Size 4.00 MiB

Total PE 1986

Free PE 8

Allocated PE 1978

PV UUID CLbABb-GcLB-l5z3-TCj3-IOK3-SQ2p-RDPW5S

使用pvdisplay我们可以看到硬盘sda的/dev/sda5分区就是workstation volume group在使用的分区也即是/tmp目录。通过给出的信息就可以更安全地说上述losf命令列出来的大量文件很有可能就是正在被频繁读写的文件。

linux一个进程打印10次,如何发现linux中引起高io等待的进程相关推荐

  1. 删除linux系统 mbr,Windows 10 下安全删除 Linux 系统

    摘要 剩下的明月就可以继续我的深度 Linux 的U盘引导安装了,我去折腾了,分享此文就当是做个折腾记录,方便自己也方便大家了! 很多人都喜欢在自己的电脑上装个双系统啥的,毕竟现在硬盘的成本是越来越低 ...

  2. linux内核4.14.10查看网卡型号,Linux中查看硬件信息命令

    Linux中查看硬件信息命令 1, 主板信息 .查看主板的序列号 -------------------------------------------------- #使用命令 dmidecode ...

  3. linux一个vlan配置多个端口映射,Linux 设置 多ip,多vlan

    引:在Linux下有时候需要给一个网卡绑定多个IP,本文介绍在Redhat系列(redhat,Fedora Core,Centos)中的实现方法和一种在Gentoo等其他Linux中普遍适用的方法. ...

  4. linux一个spi总线挂多个设备,Linux SPI总线设备驱动模型详解

    随着技术不断进步,系统的拓扑结构越来越复杂,对热插拔.跨平台移植性的要求越来越高,早期的内核难以满足这些要求,从linux2.6内核开始,引入了总线设备驱动模型.其实在linux2.4总线的概念就已经 ...

  5. linux文件内容打印成二进制,如何在二进制文件中只打印可打印字符(相当于Linux下的字符串)?...

    在Python3中,以二进制模式打开文件会得到bytes的结果.迭代一个bytes对象可以得到0到255(包括0到255)的整数,而不是字符.从^{} documentation:While byte ...

  6. linux显示文件开头部分内容,Linux 命令 - head: 打印文件的开头部分

    命令格式 head [OPTION]... [FILE]... 命令参数 -c, --bytes=[-]K 显示每个文件的前 K 字节内容. -n, --lines=[-]K 显示每个文件的前 K 行 ...

  7. 邮件 自动打印 linux,Unix / Linux基本实用程序-打印,电子邮件

    Unix / Linux基本实用程序-打印,电子邮件 在本章中,我们将详细讨论作为Unix的基本实用程序的Printing and Email.到目前为止,我们已经尝试了解Unix OS及其基本命令的 ...

  8. 在Linux-0.11中实现基于内核栈切换的进程切换

    原有的基于TSS的任务切换的不足 进程切换的六段论 1 中断进入内核 2 找到当前进程的PCB和新进程的PCB 3 完成PCB的切换 4 根据PCB完成内核栈的切换 5 切换运行资源LDT 6 利用I ...

  9. linux系统和性能监控之cpu篇,Linux系统和性能监控之CPU篇

    1.0 性能监控介绍 性能优化就是找到系统处理中的瓶颈以及去除这些的过程,多数管理员相信看一些相关的"cook book"就可以实现性能优化,通常通过对内核的一些配置是可以简单的解 ...

  10. pcb可以给用户进程读吗_「TCP/UDP」一个端口号可以同时被两个进程绑定吗? - 一口Linux...

    一.1个端口号可以同时被两个进程绑定吗? 根据端口号的绑定我们分以下几种情况来讨论: 2个进程分别建立TCP server,使用同一个端口号8888 2个进程分别建立UDP server,使用同一个端 ...

最新文章

  1. BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster( 后缀数组 + 二分 + RMQ + 树状数组 )
  2. Visual Studio中怎样更改Nuget程序包源
  3. Visiual Studio2012 CLR20r3问题
  4. console的高级使用
  5. 飞鸽传书举一个小例子
  6. java data文件夹_java-如何在不指定父文件夹/ ref的情况下遍历Datasnapshot
  7. Matlab:实现菲涅尔直边衍射仿真
  8. IDEA官网以往版本下载
  9. 宏想固态无法格式化,SM2258XT主控开卡成功经验,SM2259XT可参考
  10. 【语言-c#】应用程序正常初始化(0xc000007b)失败。请单击“确定”,终止应用程序。
  11. 因涉政内容导致域名被封禁
  12. python自动求梯度
  13. 三菱梯形图转换c语言软件,三菱梯形图转51单片机软件使用程序超过100步又要使用软件的朋友.pdf...
  14. linux批处理模式,巧用linux-top的批处理模式
  15. H5 CSS 引入方式 外联样式表
  16. 多用户商城系统流程设计和流程图,以及退换货流程图说明
  17. 福禄克DTX-1800与 DSX 系列(DSX-5000、DSX-8000)有什么区别?
  18. InChat版,仅仅两个接口实现自己的IM系统(可兼容)
  19. PX4 1.12版本后启用lpe导致飞控启动失败的问题的解决办法
  20. 敏捷管理(2)- 敏捷价值、需求、估算、计划、监控、风险管理

热门文章

  1. 【总结】Unity游戏优化
  2. SqlServer的代理问题
  3. Hibernate(四)之对象状态及一级缓存
  4. Python 基礎 - 函數介紹
  5. Extjs项目实战视频教程
  6. 规定计算机系统实现安全等级保护,计算机信息系统安全等级保护标准体系包括:信息系统安全保.DOC...
  7. java实现活动安排问题_贪心算法-活动安排问题
  8. vue程序中组件间的传值方式
  9. 【jquery】fancybox 是一款优秀的 jquery 弹出层展示插件
  10. 设置tomcat 默认访问路径