top命令动态地监视进程活动与系统负载等信息。
创新互联公司是一家集网站建设,库伦企业网站建设,库伦品牌网站建设,网站定制,库伦网站建设报价,网络营销,网络优化,库伦网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
使用示例:
效果如下图:
以上命令输出视图中分为两个区域,一个统计信息区,一个进程信息区。
统计信息区:
第一行信息依次为:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。
第二行信息依次为:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
第三行信息依次为:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
第四行信息依次为:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
第五行信息依次为:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、预加载内存量。
进程信息区:
按 q 键退出监控页面。
uptime 用于查看系统的负载信息。
使用示例:
查看系统的负载信息。
效果如下图:
输出说明:
当前服务器时间:11:06:57
当前服务器运行时长:59 min
当前用户数:1 users
当前负载情况:load average: 0.00, 0.04, 0.08(分别取1min,5min,15min的均值)
free用于显示当前系统中内存的使用量信息。
命令语法: free [-bkmotV][-s 间隔秒数]
参数说明:
使用示例:
显示当前系统中内存的使用量信息。
效果如下图:
输出说明:
ifconfig命令用于获取网卡配置与网络状态等信息。
使用示例:
获取网卡配置与网络状态等信息。
效果如下图:
输出说明:
第一部分的第一行显示网卡状态信息。
eth0表示第一块网卡。
UP代表网卡开启状态。
RUNNING代表网卡的网线被接上。
MULTICAST表示支持组播。
第二行显示网卡的网络信息。
inet(IP地址):172.16.67.50。
netmask(掩码地址):255.255.0.0。
broadcast(广播地址):172.16.255.255。
RX表示接收数据包的情况,TX表示发送数据包的情况。
lo表示主机的回环网卡,是一种特殊的网络接口,不与任何实际设备连接,而是完全由软件实现。与回环地址(127.0.0.0/8 或 ::1/128)不同,回环网卡对系统显示为一块硬件。任何发送到该网卡上的数据都将立刻被同一网卡接收到。
Linux 系统中―/proc‖是个伪文件目录,不占用系统空间,及时的反应出内存现在使用的进程情况......其中许多文件都保存系统运行状态和相关信息对于―/proc‖中文件可使用文件查看命令浏览其内容,文件中包含系统特定信息:
cpuinfo 主机CPU 信息
filesystems 文件系统信息
meninfo 主机内存信息
version Linux 内存版本信息
diskstatus 磁盘负载情况
另外top 命令可以动态的显示当前系统进程用户的使用情况,而且是动态的显示出来,尤其是在该命令显示出来的对上方对系统的情况进行汇总.
free 命令呢可以查看真实使用的内存 一般用free -m
使用lsof 、ps -aux 可以查看详细的每个进程的使用状况
dmesg 也是常用来查看系统性能的命令
用 netstat 查看 Linux 网络状况。
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
前面的 netstat -n是netstat的命令,Windows和Linux都可以用,结果显示内容差不多
后面的 awk'/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 是Linux下的命令,主要作用是对netstat输出的结果进行过滤和处理:
运行这一句之后,显示的结果类似如下:
TIME_WAIT 27
FIN_WAIT1 435
FIN_WAIT2 89
ESTABLISHED 82
SYN_RECV 64
CLOSING 4
LAST_ACK 90
内容解释如下:
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
ESTABLISHED:代表一个打开的连接
SYN-RECV:再收到和发送一个连接请求后等待对方对连接请求的确认
SYN-SENT:再发送连接请求后等待匹配的连接请求
CLOSING:等待远程TCP对连接中断的确认
CLOSED:没有任何连接状态
CLOSE-WAIT:等待从本地用户发来的连接中断请求
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
LISTEN:侦听来自远方的TCP端口的连接请求
打开终端
用top命令查看。输入:
top #查看swap
iostat -x 1 10#查看%util %idle
#如果 iostat 没有要 yum install sysstat
#如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。idle小于70% IO压力就较大了,一般读取速度有较多的wait.
#如果你想对硬盘做一个IO负荷的压力测试可以用如下命令
time dd if=/dev/zero bs=1M count=2048 of=direct_2G
#此命令为在当前目录下新建一个2G的文件
欢迎追问
[root@oldboy ~]# uptime
11:45:25 up 5 days, 13:20, 3 users, load average: 0.00, 0.01, 0.05
uptime内容显示的内容一次是系统时间,开机到现在的天数,用户登录数,以及平均负载。
核心是平均负载,其实就是【单位时间内的活跃进程数】。
2颗,单颗4核CPU为例:
1分钟:10.00 #CPU处理进程1分钟的繁忙程度,忙碌1分钟。
5分钟:8.01 #CPU处理进程5分钟的繁忙程度,忙碌了5分钟
15分钟:5.05 #CPU处理进程15分钟的繁忙程度,忙碌持续15分钟,15分钟内平均值5.
uptime:故障恢复了。
1分钟:1.00 #CPU处理进程1分钟的繁忙程度,忙碌1分钟。
5分钟:8.01 #CPU处理进程5分钟的繁忙程度,忙碌了5分钟
15分钟:5.05 #CPU处理进程15分钟的繁忙程度,忙碌持续15分钟,15分钟内平均值5.
==============================================
总结:15分钟负载值12,是高是低呢
负载数值/总的核心数=1 #开始慢的临界点,实际上1*70%==关注的临界点。
12/8=1.2 大于1就说明有问题。
负载不要超过5,是临界点。
2颗单颗4核CPU,共8核,负载就是8*70%=5左右。
需要关注负载的值:总的核心数*70%=关注的点
==================要掌握的============================
1.平均负载是运行队列中活跃的进程数。
2.平均负载,1,5,15分钟内的负载。
3.需要关注负载的值:总的核心数*70%=关注的点
4.辅助top,ps,uptime,sar,mpstat,pidstat,iostat,排查问题。
5.strace跟踪进程系统调用。
6.记住几个案例(面试讲故事)。
面试官问:
你在工作中遇到过哪些生产故障,是怎么解决的?
最好和数据库相关(负载高),和web相关(PHP进程100%,JAVA内存泄漏)
==================要掌握的============================
***6.平均负载案例分析实战\***
下面,我们以三个示例分别来看这三种情况,并用 stress、mpstat、pidstat 等工具,找出平均负载升高的根源。
stress 是 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。
mpstat 是多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。
pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。
#如果出现无法使用mpstat、pidstat命令查看%wait指标建议更新下软件包
yum install sysstats -y
yum install stress -y
stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s
***场景一:CPU 密集型进程\***
1.首先,我们在第一个终端运行 stress 命令,模拟一个 CPU 使用率 100% 的场景:
[root@oldboy ~]# stress --cpu 1 --timeout 600
2.接着,在第二个终端运行 uptime 查看平均负载的变化情况
# 使用watch -d 参数表示高亮显示变化的区域(注意负载会持续升高)
[root@oldboy ~]# watch -d uptime
*3.最后,在第三个终端运行 mpstat 查看 CPU 使用率的变化情况*
# -P ALL 表示监控所有CPU,后面数字5 表示间隔5秒后输出一组数据
[root@oldboy ~]# mpstat -P ALL 5
#单核CPU,所以只有一个all和0
4.从终端二中可以看到,1 分钟的平均负载会慢慢增加到 1.00,而从终端三中还可以看到,正好有一个 CPU 的使用率为 100%,但它的 iowait 只有 0。这说明,平均负载的升高正是由于 CPU 使用率为 100% 。那么,到底是哪个进程导致了 CPU 使用率为 100% 呢?可以使用 pidstat 来查询
![](18.Linux系统管理-进程管理.assets/a.png)
# 间隔5秒输出一组数据
[root@oldboy ~]# pidstat -u 5 1
#从这里可以明显看到,stress进程的CPU使用率为100%。
- 模拟cpu负载高 `stress --cpu 1 --timeout 100`
- 通过uptime或w 查看 `watch -d uptime`
- 查看整体状态mpstat -P ALL 1 查看每个cpu核心使用率
- 精确到进程: pidstat 1
****场景二:I/O 密集型进程\****
1.首先还是运行 stress 命令,但这次模拟 I/O 压力,即不停地执行 sync
[root@oldboy ~]# stress --io 1 --timeout 600s #利用sync()
stress --hdd 8 --hdd-bytes 1g # hd harkdisk 创建进程去进程写
*2.然后在第二个终端运行 uptime 查看平均负载的变化情况:*
[root@oldboy ~]# watch -d uptime
18:43:51 up 2 days, 4:27, 3 users, load average: 1.12, 0.65, 0.00
*3.最后第三个终端运行 mpstat 查看 CPU 使用率的变化情况:*
# 显示所有 CPU 的指标,并在间隔 5 秒输出一组数据
[root@oldboy ~]# mpstat -P ALL 5
#会发现cpu的与内核打交道的sys占用非常高
*4.那么到底是哪个进程,导致 iowait 这么高呢?我们还是用 pidstat 来查询*
# 间隔5秒后输出一组数据,-u 表示CPU指标
[root@oldboy ~]# pidstat -u 5 1
#可以发现,还是 stress 进程导致的。
- 通过stress 模拟大量进程读写 `stress --hdd 4 `
- 通过w/uptime查看系统负载信息 `watch -d uptime`
- 通过top/mpstat 排查 `mpstat -P ALL 1 或 top 按1`
- 确定是iowati `iostat 1查看整体磁盘读写情况 或iotop -o 查看具体哪个进程读写`
- 根据对应的进程,进行相关处理.
***场景三:大量进程的场景 高并发场景 \***
*当系统中运行进程超出 CPU 运行能力时,就会出现等待 CPU 的进程。*
*1.首先,我们还是使用 stress,但这次模拟的是 4 个进程*
[root@oldboy ~]# stress -c 4 --timeout 600
*2.由于系统只有 1 个 CPU,明显比 4 个进程要少得多,因而,系统的 CPU 处于严重过载状态*
*3.然后,再运行 pidstat 来看一下进程的情况:*
# 间隔5秒后输出一组数据
[root@oldboy ~]# pidstat -u 5 1
*可以看出,4 个进程在争抢 1 个 CPU,每个进程等待 CPU 的时间(也就是代码块中的 %wait 列)高达 75%。这些超出 CPU 计算能力的进程,最终导致 CPU 过载。*
****分析完这三个案例,我再来归纳一下平均负载与CPU\****
***平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。但只看平均负载本身,我们并不能直接发现,到底是哪里出现了瓶颈。所以,在理解平均负载时,也要注意:
平均负载高有可能是 CPU 密集型进程导致的;
平均负载高并不一定代表 CPU 使用率高,还有可能是 I/O 更繁忙了;
当发现负载高的时候,你可以使用 mpstat、pidstat 等工具,辅助分析负载的来源****
**系统负载的计算和意义**
进程以及子进程和线程产生的计算指令都会让cpu执行,产生请求的这些进程组成"运行队列",等待cpu执行,这个队列就是系统负载, 系统负载是所有cpu的运行队列的总和.
[root@oldboyedu ~]# w
20:25:48 up 95 days, 9:06, 1 user, load average: 2.92, 0.00, 0.00
//假设当前计算机有4个核心的cpu,当前的负载是2.92
cpu1 cpu2 cpu3 cpu4
2.94/4(个cpu核心) = 73%的cpu资源被使用,剩下27%的cpu计算资源是空想的
//假设当前的计算有2个核心的cpu,当前的负载是2.92
2.92/2 = 146% 已经验证超过了cpu的处理能力
7. 日常故障排查流程(含日志)
- w/uptime, 查看负载
- ps aux/top 看看 cpu百分比, io wait或者是内存占用的高? (三高 cpu,io,内存)
- top检查具体是哪个进程,找出可疑进程
- 追踪这个进程使用情况,做什么的?
- 看看对应**日志**是否有异常
- 系统日志: /var/log/messages(系统通用日志) /var/log/secure(用户登录情况)
- 服务软件的日志
***3.那平均负载为多少时合理\***
*最理想的状态是每个 CPU核心 上都刚好运行着一个进程,这样每个 CPU 都得到了充分利用。所以在评判平均负载时,首先你要知道系统有几个 CPU核心,这可以通过 top 命令获取,或`grep 'model name' /proc/cpuinfo`*
系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中:
- 它没有在等待I/O操作的结果
- 它没有主动进入等待状态(也就是没有调用'wait')
- 没有被停止(例如:等待终止)
《内容来自老男孩老师的课堂笔记》
盘Linux服务端的测试及故障处理办法
1、查看系统负载情况
在服务端命令窗口下执行w命令可得到三组数据(例如 0.40 0.30 1.20),分别为系统前一分钟、前5分钟、前15分钟负载情况,一般负载情况在2以下基本正常,如果长时间高于3则可认为系统负载过高,重点检查硬盘工作状况。
2、测试各硬盘读取速度判断硬盘故障
在服务端命令窗口中执行如下命令
hdparm -t /dev/hda (IDE硬盘)
hdparm -t /dev/sda (SATA、SCSI、硬RAID卡阵列)
hdparm -t /dev/md0 (软RAID设备)
测试结果在空载情况下应 40M/s ,在负载情况下平均应 20M/s 为正常,如测试结果极低则需要进一步使用硬盘专用检测工具测试是否为硬盘故障。
3、处理网络盘上数据无法正常读写问题
当在客户机上启动执行网络盘上游戏经常出现异常错误时,很可能是网络盘上的文件系统或数据出现损坏,可使用如下办法尝试修复。
在一台客户机上登陆为超级工作站连接网络盘,例如网络盘为H:,在DOS命令窗口下执行 chkdsk H:/F 对网络盘文件系统进行检查修复,修复完成后重新启动客户机看修复是否起到相应的作用,如故障依旧则考虑对网络盘重新格式化拷贝数据。
4、客户端无法连接网络盘的情况处理
有新的机器名需要连接网络磁盘时必须开启服务端虚拟磁盘管理器窗口
当服务器出现非法关机重启的情况时,很可能出现虚拟磁盘网络服务没有正常启动导致客户端无法连接网络磁盘,此时正常重新启动服务器或在命令行窗口下执行 landisk restart 来启动虚拟磁盘服务解决。
网众虚拟磁盘客户机系统还原功能失效情况的处理办法
a、分区或全盘恢复还原失效的客户机系统。
b、在服务器端虚拟磁盘管理器中删除还原失效的客户机。
c、客户机重新连接服务器,设置还原即可。
网众虚拟网络磁盘如何在没有盘符时进行磁盘扫描
a.在服务器上运行命令cmd,进入命令行状态
b.运行cd (这是方便生成的文件直接存放在c:目录下)
c.运行mountvol 1.bat (这会生成一个名为1.bat的批处理文件。)
d.将1.bat复制到桌面上。
e.编辑1.bat
找到 ?Volume{01847d10-ae98-11d9-a5d6-806d6172696f}
无加载点
无加载点的这行的上面就是去掉了盘符的'盘的磁盘卷标。保留这一行内容其它的全部删除掉。
f.最后生成留下的文件应该如下面的格式
chkdsk/f ?Volume{01847d10-ae98-11d9-a5d6-806d6172696f}
要注意啊!一定要chkdsk/f要加上f参数,才能真正修复,还有磁盘卷标的最后一个字符不是 而生成的文件是带了的,要把它删除掉。
最后说说什么时候才能用这个批处理进行扫描
a.当你发现在用超级用户更新之后,有的机看得到网络磁盘,有的机看不到网络磁盘,或者是打得开盘却看不到内容不得时,可以使用。
b.当服务器重新启动时,提示有磁盘扫描,并自动进行扫描时,本来以前是必须要等这个扫描过程完成才能进入WINDOWS,但现在你就可以直接跳过扫描,等系统进了WINDOWS再运行这个批处理了。这样就不会影响到客人玩游戏。
c.磁盘扫描完成之后,客户机有可能要重新启动才能正常看到网络盘的文件。
d.一定要注意,这是一个非常危险的命令,你在使用时必须要保证没有超级用户存在(就是标记为红色的电脑)否则有可能造游戏盘上所有的文件丢失得一干二净!