linux查看磁盘IO,网络 IO可用的命令
1. top 监控整体服务器,cpu,内存,磁盘,网络等
2. dstat -d 查看当前磁盘每秒的读取,写入量,单位K
3. dstat -r 查看当前磁盘随机的读IOPS,写IOPS
4. dstat -n 查看网卡每秒接收,发送量,单位K,不足1K时显示Byte数
5. pidstat 统计各个进程的磁盘IO,也可以监控指定进程,还可以监控cpu和内存
6. iotop 类似top命令,不过iotop是只监控io相关的进程
7. vmstat 监控io活跃的进程,还可以监控内存,cpu相关
开始对上面各个命令详细解释
1. top 监控整体服务器,cpu,内存,磁盘,网络等最常用的监控命令了,可以查看我的这篇博客
由于以下三个命令都用到了dstat,需要先安装,ubuntu下使用 apt install dstat 安装,centos下使用 yum -y install dstat 进行安装
2. dstat -d 查看当前磁盘每秒的读取,写入量,每秒刷新一次,单位K,不足1K时用B表字节数
每秒刷新一次,普通的机械硬盘可以做到每秒上百MB的读写数据量,SSD硬盘可以做到每秒500MB - 3000MB的读写数据量,大家可以依次估算
如下图,read表磁盘每秒读取量,104B表104字节,writ表磁盘每秒写入量,19K表写入了19K的数据

3. dstat -r 查看当前磁盘随机的读IOPS,写IOPS
每秒刷新一次,普通的机械硬盘可以每秒300次的随机IOPS,SSD硬盘可以每秒8万-10万的随机IOPS,大家可以依次估算自己的硬盘使用情况
如下图,read表随机磁盘的每秒读取次数,writ表随机磁盘的每秒写入次数,即随机IOPS
比如writ为2.57就是每秒随机写入2.57次,极低了

4. dstat -n 查看网卡每秒接收,发送量,单位K,不足1K时显示Byte数
每秒刷新一次,现在都是千M网卡了,也就是网卡可以达到100多M每秒,依次可以估算网络流量距离极限还有多远
如下图
recv表网卡每秒收到的字节数,不足1K时用B表示byte数
send表网卡每秒发送出去的字节数,不足1K时用B表示byte数

5. pidstat 统计各个进程的磁盘IO,还可以监控cpu和内存
每秒刷新一次,最后按下ctrl+C退出时会把刚才的监控平均值打印出来,如下图

可以看到
第一列是当前时间戳
PID表进程号
kB_rd/s 表每秒read磁盘的数据量
kB_wr/s 表每秒write磁盘的数据量
kB_ccwr/s 表任务取消的写入磁盘的KB,当任务截断脏的pagecache的时候会发生
Command表该进程的启动命令
最下面的Average是平均值,可以更清晰地看到各个进程的IO情况
6. iotop 类似top命令,不过iotop是只监控io相关的进程
每秒刷新一次,可以查看哪些进程使用io比较高
按下o键可以只显示I当前O活跃的线程,再按下o键可以恢复显示成全部的IO线程
按下p键可以把线程ID转换为进程ID,再按下p键可以恢复成线程ID
如下图

所有的列讲解一下
Total DISK READ : 从磁盘中读取的总速率
Total DISK WRITE : 往磁盘里写入的总速率
Actual DISK READ : 从磁盘中读取的实际速率
Actual DISK WRITE : 往磁盘里写入的实际速率
TID : 线程ID,按p键可转换成进程ID,再按p键可恢复成线程ID
PRIO : 优先级
USER : 线程所有者
DISK READ : 从磁盘中读取的速率
DISK WRITE : 往磁盘里写入的速率
SWAPIN : swap交换百分比
IO> : IO等待所占用的百分比
COMMAND : 具体的进程命令
7. vmstat 监控io活跃的进程,还可以监控内存,cpu相关
如下图,vmstat 表每隔2秒输出一次,一共输出3次

procs
r 等待运行的进程数
b 处在非中断睡眠状态的进程数
memory
swpd 虚拟内存使用情况,单位:K
free 空闲的内存,单位K
buff 被用来做为缓存的内存数,单位:K
cache 被用来做为缓存的内存数,单位:K
swap
si 从磁盘交换到内存的交换页数量
so 从内存交换到磁盘的交换页数量
io
bi 发送到块设备的块数
bo 从块设备接收到的块数
system
in 每秒的中断数,包括时钟中断
cs 每秒的环境(上下文)切换次数
cpu
us 用户态CPU 使用百分比
sy 内核态CPU 使用百分比
id cpu空闲百分比
wa
st
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上
是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案
我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT
深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG