1.1 top
1.2 vmstat
r 表示可运行进程数目,数据大致相符;而b表示的是 uninterruptible 睡眠的进程数目;swpd 表示使用到的虚拟内存数量,跟 top-Swap-used 的数值是一个含义,而如手册所说,通常情况下 buffers 数目要比 cached Mem 小的多,buffers 一般20M这么个数量级;io 域的 bi、bo 表明每秒钟向磁盘接收和发送的块数目(blocks/s);system 域的 in 表明每秒钟的系统中断数(包括时钟中断),cs表明因为进程切换导致上下文切换的数目。
说到这里,想到以前很多人纠结编译 linux kernel 的时候 -j 参数究竟是 CPU Core 还是 CPU Core+1?通过上面修改 -j 参数值编译 boost 和 linux kernel 的同时开启 vmstat 监控,发现两种情况下 context switch 基本没有变化,且也只有显著增加 -j 值后 context switch 才会有显著的增加,看来不必过于纠结这个参数了,虽然具体编译时间长度我还没有测试。资料说如果不是在系统启动或者 benchmark 的状态,参数 context switch>100000 程序肯定有问题。
1.3 pidstat
如果想对某个进程进行全面具体的追踪,没有什么比 pidstat 更合适的了——栈空间、缺页情况、主被动切换等信息尽收眼底。这个命令最有用的参数是-t,可以将进程中各个线程的详细信息罗列出来。
-r: 显示缺页错误和内存使用状况,缺页错误是程序需要访问映射在虚拟内存空间中但是还尚未被加载到物理内存中的一个分页,缺页错误两个主要类型是
-s:栈使用状况,包括 StkSize 为线程保留的栈空间,以及 StkRef 实际使用的栈空间。使用ulimit -s发现CentOS 6.x上面默认栈空间是10240K,而 CentOS 7.x、Ubuntu系列默认栈空间大小为8196K
1.4 其他
while :do ps -eo user,pid,ni,pri,pcpu,psr,comm | grep 'ailawd'sleep 1done
2.1 iostat
3.1 netstat
➜ ~ netstat -antp #列出所有TCP的连接
➜ ~ netstat -nltp #列出本地所有TCP侦听套接字,不要加-a参数
3.2 sar
3.3 tcpdump
负载(load)是linux机器的一个重要指标,直观了反应了机器当前的状态。
来看下负载的定义是怎样的:
In UNIX computing, the system load is a measure of the amount of computational work that a computer system performs. The load average represents the average system load over a period of time. It conventionally appears in the form of three numbers which represent the system load during the last one-, five-, and fifteen-minute periods.(wikipedia)
Unix refers to this as the run-queue length: the sum of the number of processes that are currently running plus the number that are waiting (queued) to run.
Free memory is the amount of memory which is currently not used for anything. This number should be small, because memory which is not used is simply wasted.
Available memory is the amount of memory which is available for allocation to a new process or to existing processes。
df
查看磁盘使用情况,通常看磁盘大小和inode使用率:
磁盘性能分析
r/s 和 w/s:每秒磁盘读写的次数。这两个值相加就是 tps。
rkB/s 和 wkB/s:每秒磁盘读写的数据量。
avgrq-sz:平均每次读写磁盘扇区的大小。
avgqu-sze:平均 IO 队列长度。队列长度越短越好。
await:平均每次磁盘读写的等待时间(ms)。
svctm:平均每次磁盘读写的服务时间(ms)。
%util:一秒钟有百分之多少的时间用于磁盘读写操作。
1)%util:衡量 IO 的繁忙程度
这个值越大,说明产生的 IO 请求较多,IO 压力较大,
我们可以结合 %idle 参数来看,如果 %idle <70% 就说明 IO 比较繁忙了。
2)await:衡量 IO 的响应速度
通俗理解,await 就像我们去医院看病排队等待的时间,
这个值和医生的服务速度(svctm)和你前面排队的人数(avgqu-size)有关。
如果 svctm 和 await 接近,说明磁盘 IO 响应时间较快,排队较少,
如果 await 远大于 svctm,说明此时队列太长,响应较慢,
这时可以考虑换性能更好的磁盘。
带宽:表示链路的最大传输速率,单位通常为 b/s (比特 / 秒)
延时:表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟
在不同场景中,这一指标可能会有不同含义
比如,它可以表示,建立连接需要的时间(比如 TCP握手延时)
或一个数据包往返所需的时间(比如 RTT)
PPS:是 Packet Per Second(包 / 秒)的缩写,表示以网络包为单位的传输速率�丢包率:丢包百分比
重传率:重新传输的网络包比例
连接数状态:TCP 各状态连接数量
TIME_WAIT状态存在有两个原因。
第一个是防止来自一个连接的延迟段被误解为后续连接的一部分。
连接处于2MSL等待状态时到达的所有流量都将被丢弃。
该TIME_WAIT状态的第二个原因是
可靠地实现TCP的全双工连接终止。
如果最后的ACK被丢弃,那么端点2将重新发送最后的FIN
单机最大连接数理论限制
系统用一个4四元组来唯一标识一个TCP连接: �{local ip, local port, remote ip, remote port}。 �
因此本地端口个数最大只有65536,端口0有特殊含义,不能使用,
这样可用端口最多只有65535,
所以在全部作为client端的情况下,
最大tcp连接数为65535,这些连接可以连到不同的server ip
1、系统最大打开文件数
sys.fs.files.max//系统最大文件句柄数
/proc/sys/fs/file-max
2、单进程最大文件描述符
echo 2000000 >/proc/sys/fs/nr_open
sysctl -w fs.nr_open=100000000
3、某个用户下的某个进程的文件打开数
ulimit –n [num]
ulimit -n unlimited
/etc/security/limits.conf
worker soft nofile 102400
worker hard nofile 409600
linux内核通过进程标识值(process identification value)-PID来标示进程,
PID是一个数,类型位pid_t, 实际上就是int类型
查看
可以使用cat /proc/sys/kernel/pid_max来查看系统中可创建的进程数实际值
修改
1、ulimit -u 65535
2、我们在Linux还需要设置内核参数kernel.pid_maxsysctl -w kernel.pid_max=65535
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)