系统监控及进程
1.负载
#top #w #uptime ps:load average一般都不大于cpu的逻辑数,如果占用超过80%,则表明系统有压力,需要优化或升级
2.top
进程的五种状态:
R(运行中):正在运行或在运行队列中等待
S(中断):休眠中,在等待某个条件的形成或接受到信号
D(不可中断):收到信号不唤醒或不可运行,进程必须等待,直到有中断发生
Z(僵死):进程已终止,但进程描述符存在,直到父进程调用wait4()系统调用后释放
T(停止):进程收到SIGSTOP,SIGSTP,SIGIN,SIGOUT信号后停止运行
第一行:系统时间 运行时间 登录用户数 系统负载(1分钟,5分钟,15分钟)
第二行:进程总数 运行中的 睡眠中的 停止的 僵尸的
第三行:用户占用资源(us) 系统内核占用资源(sy) 改变过优先级的进程(ni) 空闲资源(id) 等待输入输出时间(wa) 硬中断(hi) 软中断(si) 来自于一个虚拟机偷取的CPU时间的百分比(st)
第四行:物理内存总量 使用量 空闲量 作为内核缓存的内存量
第五行:虚拟内存总量 使用量 空闲量 已被提前加载的内存数据
PID: 进程id
USER:进程所有者
PR:优先级
NI:优先级(负值表示优先级更高)
VIRT:虚拟内存使用量
RES:物理内存使用量
SHR:共享内存大小
S:状态(上文的进程的五种状态)
%CPU:CPU使用百分比
%MEM:内存使用百分比
TIME+:使用cpu的时间(单位是1/100秒)
COMMAND:命令名称
pidof:查看进程的id
#pidof nginx
pgrep:运行进程队列中查找进程,并显示查找到的进程id
#pgrep -n httpd #strace -c -p $(pgrep -n httpd)
kill:杀死进程
#kill -9 PID
killall:终止特定名称的所有进程
#killall httpd
3.vmstat系统整体性能监控:
#vmstat
r:表示运行队列(就是说多少个进程真的分配到CPU),当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
b:表示阻塞的进程
swpd:虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。如果该值不算很大,比如几百k,并且没有继续增大,一般可能是编辑文件时出现故障,产生了.swap文件.
free:空闲的物理内存的大小
buff:Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存
cache:cache直接用来记忆我们打开的文件,给文件做缓冲,Linux/Unix把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用
si:每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
so:每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
bi:块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,
bo:块设备每秒发送的块数量.bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
in:每秒CPU的中断次数,包括时间中断
cs:每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
us:用户CPU时间
sy:系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id:空闲 CPU时间,一般来说,id + us + sy = 100
wa:等待IO CPU时间。
st:来自于一个虚拟机偷取的CPU时间的百分比
buffer和cache的区别:
buffer:是用于存储速度不同步或优先级不同的设备之间传输数据的区域,把分散的写操作集中进行,减少磁盘寻道.
cache:cache是把读取过的数据保存起来,下次读取直接从cache读,如果找不到,再去读硬盘.其中的数据会根据频率进行组织,较高频率用到的数据,会被放在容易找到的地方.不读的数据往后排,直至从cache中删除.
简单的说:buffer用于写,而cache用于读.linux中由os控制,如果进程需要分配内容,则回收该两项,用于充足内存.
A buffer is something that has yet to be "written" to disk. A cache is something that has been "read" from the disk and stored for later use.
4.进程的前后台运行:
ctrl+c: 终止一个终端运行的命令 crtl+z: 将终端运行的命令放入后台(但并不是在后台运行) jobs:查看所有在后台运行的进程 bg:让后台的命令继续执行,如#bg 1 fg:让后台的命令切换到前台执行,如#fg 1