阅读文本大概须要3分钟。css
0x01:网络IO
一、sar -n DEV 1 3 监控网卡IOhtml
二、ethtool 网卡名
查看网卡的最大速率等参数信息java
三、netstat -nat | awk 'FNR>2{print $NF}' | sort | uniq -c
查看系统TIME_WAIT状态链接数node
四、查看DND信息dig命令linux
dig baidu.com # 输出host的cname记录与A记录,能够看到ip地址和使用的DNS服务器信息,添加` +short`能够简化输出
dig -x 204.152.184.167 +short # 用 -x的选项查找IP地址的主机名
dig @ns1.google.com www.google.com 指定查询的DNS server
tcpdumpios
tcpdump -D # 显示能够抓取的全部网络接口
# 抓取9100端口,网卡xgbe0的TCP网络包信息,保存到aaa.pcap
tcpdump tcp port 9100 -i xgbe0 -nn -s 0 -XX -w aaa.pcap
# 指定目的或者源ip,可使用and,or
tcpdump -i eth0 src and dst 172.16.11.1 and port 80 -nn -s 0 -XX -w aaa.pcap
# 指定主机
tcpdump -i eth0 host 172.16.11.1 and port 80 -nn -s 0 -XX -w aaa.pcap
# 抓取http包,通常是eth0,xgbe0,能够加上port 80做为条件,这里是指本机接收http请求的80端口,发出端口为随机
tcpdump -i xgbe0 -nn -s 0 -XX -w yq41.pcap
wireshark分析网络包nginx
一、tcpdump保存的文件是二进制的文件,须要下载到本地用wireshark查看程序员
二、过滤器:tcp.streamweb
三、抓包参数和结果解析sql
CPU
一、mpstat -P ALL 1 1
查看cpu占用率波动状况;也能够top
,而后1
二、taskset绑定进程或者线程到指定CPU的核
taskset -cp pid 查看进程所属核
taskset -acp pid 查看进程及全部线程的所属核
taskset -pc 3 pid 表示将进程pid绑定到第3个核上
taskset -a -pc 3 pid 表示将进程pid(包括全部线程)绑定到第3个核上
taskset -cp 1,2,3 pid
pidstat 用于监控所有或指定进程的cpu、内存、线程、设备IO等系统资源的占用状况
# 查看CPU
pidstat -p pid 3 3
# 查看进程内存状态,用ps效果同样,RSS单位为KB
pidstat -r -p 26716 3 3
# 查看进程磁盘IO
pidstat -d -p 26716 3 3
# 查看进程上下文切换
pidstat -wt -p 26716 3 3
# 查看进程中的线程信息
pidstat -t -p 26716 3 3
vmstat 2 1 查看系统上下文切换
内存
top
一、top命令经常使用参数
二、P,M分别是按cpu和内存排序;mac系统使用o + 列名
三、sar -u 1 3
监控CPU状态
四、top -p 345
查看指定pid=345的进程,在mac中用-pid代替-p
五、%cpu参数不可靠,须要1查看每一个CPU的使用率才可靠
free
-g```:以GB为显示单位,也能够-m以MB为显示单位
name | total | used | free | shared | buffers |cached
--- | --- | --- | --- | --- | --- | ---
Mem: | 125 | 125 | 0 | 0 | 0 | 109 |
-/+ buffers/cache: | | 15(上一行的used - buffers - cached) | 110(上一行的 free + buffers + cached)
Swap: | 0 | 0 | 0
对操做系统来说,为了内存利用率最大化,会把剩余内存申请为cached,因此系统运行时间长了,cached就会比较大,对于频繁读写的系统就更加明显。used 和 free都是Mem的参数,因此 buffers/cached这两项对于操做系统来说都是已经被使用的内存,因此呢 free的就比较少;
而对于应用程序来讲呢,buffers/cached等同于可用的内存,由于buffers/cached可提升程序执行的性能,当程序使用内存时,buffers/cached很快就会被使用。
因此从应用程序的角度来看,应以(-/+ buffers/cached)的free 和 used为主,即咱们主要与他相关的free和used就能够了
咱们在观察Linux的内存使用状况时,只要没发现用swap的交换空间,就没必要担忧本身的内存太少。若是经常看到swap用了不少,那么你就要考虑加物理内存了,能够用`vmstat`查看swap IO情况。这也是在Linux服务器上看内存是否够用的标准。由于swap用的多,说明OS把本应该存在物理内存中的部份内存页调度到了磁盘,腾出空间给当前进程使用,等到其余进程运行时才会把这部份内存页再次调度到物理内存。
#### buffer/cache/shared memory区别与联系
#### pmap
1. 查看进程内存分布情况,能够用来分析线程堆栈:`pmap -d 12345 # 12345 是进程号`
#### 清理linux cache
Kernels 2.6.16 and newer provide a mechanism to have the kernel drop the page cache and/or inode and dentry caches on command, which can help free up a lot of memory.
This is a non-destructive operation and will only free things that are completely unused. Dirty objects will continue to be in use until written out to disk and are not freeable. If you run "sync" first to flush them out to disk, these drop operations will tend to free more memory.
To free pagecache:
# echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
# echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches
> 遇到报错:```tcpdump: can't create rx ring on packet socket: cannot allocate memory```, 可使用该命令清除cache
### 磁盘IO
#### 磁盘IOPS和Throughput
1. 磁盘的 IOPS,也就是在一秒内磁盘进行多少次 I/O 读写。磁盘的吞吐量,也就是每秒磁盘 I/O 的流量,即磁盘写入加上读出的数据的大小。每秒 I/O 吞吐量= IOPS* 平均 I/O SIZE
2. 随机读写频繁的应用,如OLTP(Online Transaction Processing),IOPS是关键衡量指标;对于大量顺序读写的应用,如VOD(Video On Demand),则更关注吞吐量指标。
#### 影响IOPS的因素
1. 第一个**寻址时间**,考虑到被读写的数据可能在磁盘的任意一个磁道,既有可能在磁盘的最内圈(寻址时间最短),也可能在磁盘的最外圈(寻址时间最长),因此在计算中咱们只考虑平均寻址时间,也就是磁盘参数中标明的那个平均寻址时间,这里就采用当前最多的10krmp硬盘的5ms。
2. 第二个**旋转延时**,和寻址同样,当磁头定位到磁道以后有可能正好在要读写扇区之上,这时候是不须要额外额延时就能够马上读写到数据,可是最坏的状况确实要磁盘旋转整整一圈以后磁头才能读取到数据,因此这里咱们也考虑的是平均旋转延时,对于10krpm的磁盘就是(60s/10k)*(1/2) = 2ms。
3. 第三个**传送时间**,磁盘参数提供咱们的最大的传输速度,固然要达到这种速度是颇有难度的,可是这个速度倒是磁盘纯读写磁盘的速度,所以只要给定了单次 IO的大小,咱们就知道磁盘须要花费多少时间在数据传送上,这个时间就是IO Chunk Size / Max Transfer Rate。
#### I/O 读写的类型
大致上讲,I/O 的类型能够分为:读 / 写 I/O、大 / 小块 I/O、连续 / 随机 I/O, 顺序 / 并发 I/O。在这几种类型中,咱们主要讨论一下:大 / 小块 I/O、连续 / 随机 I/O, 顺序 / 并发 I/O。
##### 大 / 小块 I/O
这个数值指的是控制器指令中给出的连续读出扇区数目的多少。若是数目较多,如 64,128 等,咱们能够认为是大块 I/O;反之,若是很小,好比 4,8,咱们就会认为是小块 I/O,实际上,在大块和小块 I/O 之间,没有明确的界限。
##### 连续 / 随机 I/O
连续 I/O 指的是本次 I/O 给出的初始扇区地址和上一次 I/O 的结束扇区地址是彻底连续或者相隔很少的。反之,若是相差很大,则算做一次随机 I/O
连续 I/O 比随机 I/O 效率高的缘由是:在作连续 I/O 的时候,磁头几乎不用换道,或者换道的时间很短;而对于随机 I/O,若是这个 I/O 不少的话,会致使磁头不停地换道,形成效率的极大下降。
##### 顺序 / 并发 I/O
从概念上讲,并发 I/O 就是指向一块磁盘发出一条 I/O 指令后,没必要等待它回应,接着向另一块磁盘发 I/O 指令。对于具备条带性的 RAID(LUN),对其进行的 I/O 操做是并发的,例如:raid 0+1(1+0),raid5 等。反之则为顺序 I/O。
#### [磁盘I/O那些事](https://tech.meituan.com/about_desk_io.html)
#### [Linux下的IO监控与分析](https://www.cnblogs.com/quixotic/p/3258730.html)
1. `iostat -xm 1 1`: 监控CPU状态和磁盘IO
2. [iostat命令输出详解](http://www.cnblogs.com/peida/archive/2012/12/28/2837345.html)
### 系统端口占用信息和进程信息
- ```lsof | grep pid/pname``` 查看进程信息
- ```lsof -i:port```查看端口号port使用的进程号和链接状况
- ```lsof -i@ip:port```使用@host:port来显示指定到指定主机的链接
- ```lsof -iTCP```显示TCP链接
- ```lsof -c abc``` 显示 abc 进程如今打开的文件
- ```lsof -p 12``` 看进程号为 12 的进程打开了哪些文件
- ```netstat -np/c/atux | grep pid/port/pname```查看进程号所占用的端口号和端口占用状况
- `netstat -n | grep tcp | grep 侦听端口 | wc -l` : 监听端口链接数
- `netstat -nat | grep 3306 -c` : 查看数据库链接使用数目
- ```ps aux```只能看到pid等信息,不能看到端口号
- `ps -eLf | grep java | wc -l`: 监控java进程的线程数, 或者`ps -eLf | grep 27955 -c`
- `ps -eo pid,pcpu | sort -rn -k 2 | less` 查看CPU高占用的进程pid
- `ps H -eo pid,tid,pcpu | sort -rn -k 3 | less` 查看CPU高占用的pid及线程id
- `cat /proc/进程号/task/线程号/status` 查看线程具体信息
- `printf "%x\n" 7444` 线程id转成十六进制,能够用于jstack dump信息的搜索id
- 远程登陆 `telnet hostname`
### sar命令查看网络、磁盘、CPU、内存信息
sar - Collect, report, or save system activity information.
参数说明
-A 汇总全部的报告
-a 报告文件读写使用状况
-B 报告附加的缓存的使用状况
-b 报告缓存的使用状况
-c 报告系统调用的使用状况
-d 报告磁盘的使用状况
-g 报告串口的使用状况
-h 报告关于buffer使用的统计数据
-m 报告IPC消息队列和信号量的使用状况
-n 报告命名cache的使用状况
-p 报告调页活动的使用状况
-q 报告运行队列和交换队列的平均长度
-R 报告进程的活动状况
-r 报告没有使用的内存页面和硬盘块
-u 报告CPU的利用率
-v 报告进程、i节点、文件和锁表状态
-w 报告系统交换活动情况
-y 报告TTY设备活动情况
系统平均load负载
sar -q 2 2
参数:
runq-sz:运行队列的长度(等待CPU时间片来运行的进程数)
plist-sz:进程列表中进程(processes)和线程(threads)的数量
ldavg-1:最后1分钟的系统平均负载 ldavg-5:过去5分钟的系统平均负载
ldavg-15:过去15分钟的系统平均负载
查看内存信息
sar -r 1 3
参数解释:
kbmemfree:剩余可用内存、单位K
kbmemused:已用内存、以K 为单位、该值不考虑内核自身所使用的内存
%memused:已用内存百分比
kbbuffers:已用buffer(内核所用)、单位K
kbcached:已用cache(内核所用)、单位K
kbswpfree:剩余Swap、单位K
kbswpused:已用Swap、单位K
%swpused:已用Swap百分比
kbswpcad:被缓存的Swap、单位K
内存分页统计
sar -B 5 3
参数解释:
pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)
pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)
fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)
majflt/s:每秒钟产生的主缺页数.
系统交换活动情况
sar -w 1 3
参数:
pswpin/s:每秒系统换入的交换页面(swap page)数量
pswpout/s:每秒系统换出的交换页面(swap page)数量
CPU信息
sar -u 3 5
参数解释:
%user:显示在用户级别(application)运行使用 CPU 总时间的百分比
%nice:显示在用户级别,经过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例
%system:在内核级别(kernel)运行所使用 CPU 总时间的百分比
%iowait:显示用于等待I/O操做占用 CPU 总时间的百分比
%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比
1)若 %iowait 的值太高(大于0的长时间值),表示硬盘或者网络存在I/O瓶颈
2)若 %idle 的值高但系统响应慢时,有多是 CPU 等待分配内存,此时应加大内存容量
3)若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,代表系统中最须要解决的资源是 CPU
磁盘信息
sar -b 3 5
tps:每秒磁盘的 I/O 传输总量
rtps:每秒从磁盘读出的数据总量
wtps:每秒向磁盘写入的数据总量
bread/s:每秒从磁盘读出的数据量,单位为 块/s
bwrtn/s:每秒向磁盘写入的数据量,单位为 块/s
网络IO
sar -n DEV 2 3
监控TCP链接状态
sar -n TCP/ETCP 1
active/s: 每秒本地发起的TCP链接数,即服务器经过connect调用建立的TCP链接数
passive/s: 每秒远程发起的TCP链接数,即服务器经过accept调用建立的链接数
retrans/s: 每秒重传数量
### Linux /proc目录
在Linux系统“一切都是文件”的思想贯彻指导下,全部进程的运行状态均可以用文件来获取。系统根目录/proc中,每个数字子目录的名字都是运行中的进程的PID,进入任一个进程目录,可经过其中文件或目录来观察进程的各项运行指标,例如task目录就是用来描述进程中线程的
能够经过下面的方法获取某进程中运行中的线程数量(PID指的是进程ID)
ls /proc/PID/task | wc -l
获取进程相关信息
cat /proc/PID/status
获取内存信息
vmstat -s -S M
cat /proc/meminfo
CPU信息
cat /proc/cpuinfo
调整TCP receive窗口大小
浅谈TCP参数优化
/sbin/sysctl net.ipv4.tcp_rmem
cat /proc/sys/net/ipv4/tcp_rmem
Linux单机性能评估和优化
Linux服务器性能评估与优化(一)
Linux服务器性能评估与优化(二)
单机性能主要包括CPU、内存、网络IO、磁盘IO几个方面,互相依赖,互相影响。例如,网卡巨量吞吐或者磁盘频繁读写均可能致使CPU系统调用太高而占用率很高。CPU通常认为user%+sys%<70%为良好状态,内存通常认为si和swap out都为0为良好状态,磁盘认为iowait%<20%为良好状态
☆
往期精彩
☆
关注我
天天进步一点点
本文分享自微信公众号 - JAVA乐园(happyhuangjinjin88)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。