学习笔记内容概要

进程查看的命令:top,ps,pstree

进程管理的命令:kill,nice,renice

查看进程:

一、top工具

top 工具是我们常用的一个查看工具,能实时的查看我们系统的一些关键信息的变化。

top

我们看到 top 显示的第一排,

内容以及解释

  • top                     表示当前程序的名称
  • 11:05:18             表示当前的系统的时间
  • up 8 days,17:12           表示该机器已经启动了多长时间
  • 1 user              表示当前系统中只有一个用户
  • load average: 0.29,0.20,0.25     分别对应1、5、15分钟内cpu的平均负载

load average 在 wikipedia 中的解释是 the system load is a measure of the amount of work that a computer system is doing 也就是对当前 CPU 工作量的度量,具体来说也就是指运行队列的平均长度,也就是等待 CPU 的平均进程数相关的一个计算值。

我们该如何看待这个load average 数据呢?

假设我们的系统是单 CPU、单内核的,把它比喻成是一条单向的桥,把CPU任务比作汽车。

load = 0 的时候意味着这个桥上并没有车,cpu 没有任何任务;
load < 1 的时候意味着桥上的车并不多,一切都还是很流畅的,cpu 的任务并不多,资源还很充足;
load = 1 的时候就意味着桥已经被车给沾满了,没有一点空隙,cpu 的已经在全力工作了,所有的资源都被用完了,当然还好,这还在能力范围之内,只是有点慢而已;
load > 1 的时候就意味着不仅仅是桥上已经被车占满了,就连桥外都被占满了,cpu 已经在全力的工作了,系统资源的用完了,但是还是有大量的进程在请求,在等待。若是这个值大于2,大于3,超过 CPU 工作能力的 2,3。而若是这个值 > 5 说明系统已经在超负荷运作了。【注释1】
这是单个 CPU 单核的情况,而实际生活中我们需要将得到的这个值除以我们的核数来看。我们可以通过一下的命令来查看 CPU 的个数与核心数

#查看物理CPU的个数
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l #每个cpu的核心数
cat /proc/cpuinfo |grep "physical id"|grep ""|wc -l

通过上面的指数我们可以得知 load 的临界值为 1 ,但是在实际生活中,比较有经验的运维或者系统管理员会将临界值定为0.7。这里的指数都是除以核心数以后的值,不要混淆了

  • 若是 load < 0.7 并不会去关注他;
  • 若是 0.7< load < 1 的时候我们就需要稍微关注一下了,虽然还可以应付但是这个值已经离临界不远了;
  • 若是 load = 1 的时候我们就需要警惕了,因为这个时候已经没有更多的资源的了,已经在全力以赴了;
  • 若是 load > 5 的时候系统已经快不行了,这个时候你需要加班解决问题了

看 top 的第二行数据,基本上第二行是进程的一个情况统计

内容以及解释

  • Tasks: 26 total   进程总数  
  • 1 running     1个正在运行的进程数
  • 25 sleeping    25个睡眠的进程数
  • 0 stopped      没有停止的进程数
  • 0 zombie     没有僵尸进程数

来看 top 的第三行数据,这一行基本上是 CPU 的一个使用情况的统计了

内容以及解释

  • Cpu(s): 1.0%us     用户空间进程占用CPU百分比
  • 1.0% sy         内核空间运行占用CPU百分比
  • 0.0%ni        用户进程空间内改变过优先级的进程占用CPU百分比
  • 97.9%id         空闲CPU百分比
  • 0.0%wa         等待输入输出的CPU时间百分比
  • 0.1%hi        硬中断(Hardware IRQ)占用CPU的百分比
  • 0.0%si        软中断(Software IRQ)占用CPU的百分比
  • 0.0%st        (Steal time) 是 hypervisor 等虚拟服务中,虚拟 CPU 等待实际 CPU 的时间的百分比

#CPU 利用率是对一个时间段内 CPU 使用状况的统计,通过这个指标可以看出在某一个时间段内 CPU 被占用的情况,而 Load Average 是 CPU 的 Load,它所包含的信息不是 CPU 的使用率状况,而是在一段时间内 CPU 正在处理以及等待 CPU 处理的进程数情况统计信息,这两个指标并不一样。

来看 top 的第四行数据,这一行基本上是内存的一个使用情况的统计了:

内容以及解释

  • 8176740 total      物理内存总量
  • 8032104 used      使用的物理内存总量
  • 144636 free         空闲内存总量
  • 313088 buffers    用作内核缓存的内存量

top 的第五行数据,这一行基本上是交换区的一个使用情况的统计了

内容以及解释

  • total       交换区总量
  • used       使用的交换区总量
  • free        空闲交换区总量
  • cached   缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖

再下面就是进程的一个情况了

列名以及解释

  • PID             进程id
  • USER          该进程的所属用户
  • PR          该进程执行的优先级 priority 值
  • NI            该进程的 nice 值
  • VIRT           该进程任务所使用的虚拟内存的总数
  • RES            该进程所使用的物理内存数,也称之为驻留内存数
  • SHR           该进程共享内存的大小
  • S                该进程进程的状态: S=sleep R=running Z=zombie
  • %CPU        该进程CPU的利用率
  • %MEM      该进程内存的利用率
  • TIME+       该进程活跃的总时间
  • COMMAND   该进程运行的名字

top 是一个前台程序,所以是一个可以交互的

常用交互命令以及解释

  • q     退出程序
  • I      切换显示平均负载和启动时间的信息
  • P     根据CPU使用百分比大小进行排序
  • M    根据驻留内存大小进行排序
  • i      忽略闲置和僵死的进程,这是一个开关式命令
  • k     终止一个进程,系统提示输入 PID 及发送的信号值。一般终止进程用 15 信号,不能正常结束则使用 9 信号。安全模式下该命令被屏蔽。

二、ps工具

我们常用下面这个命令,他将会罗列出所有的进程信息

ps aux
使用 -l 参数可以显示自己这次登陆的 bash 相关的进程信息罗列出来
ps -l

若是查找其中的某个进程的话,我们还可以配合着 grep 和正则表达式一起使用

ps aux | grep zsh

此外我们还可以查看时,将连同部分的进程呈树状显示出来

ps axjf

当然如果你觉得使用这样的此时没有把你想要的信息放在一起,我们也可以是用这样的命令,来自定义我们所需要的参数显示

ps -afxo user,ppid,pid,pgid,command

三、pstree工具

通过 pstree 可以很直接的看到相同的进程数量,最主要的还是我们可以看到所有进程之间的相关性。

pstree

管理进程

一、kill命令

kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
#以进程编号12345为例,kill掉进程

#杀死进程
$ kill 12345 #强制杀死进程
$ kill -KILL 123456 #发送SIGHUP信号,可以使用一下信号
$ kill -HUP pid #彻底杀死进程
$ kill -9 123456
#操作示例
#首先我们使用图形界面打开了 gedit、gvim,用 ps 可以查看到
ps aux #使用9这个信号强制结束 gedit 进程
kill -9 1608 #我们再查找这个进程的时候就找不到了
ps aux | grep gedit

二、nice、renice改变进程的执行顺序

在使用 ps 命令的时候可以看到大部分的进程都是处于休眠的状态,如果这些进程都被唤醒,那么该谁最先享受 CPU 的服务,后面的进程又该是一个什么样的顺序呢?进程调度的队列又该如何去排列呢?当然就是靠该进程的优先级值来判定进程调度的优先级,而优先级的值就是上文所提到的 PR 与 nice 来控制与体现了

而 nice 的值我们是可以通过 nice 命令来修改的,而需要注意的是 nice 值可以调整的范围是 -20 ~ 19,其中 root 有着至高无上的权力,既可以调整自己的进程也可以调整其他用户的程序,并且是所有的值都可以用,而普通用户只可以调制属于自己的进程,并且其使用的范围只能是 0 ~ 19,因为系统为了避免一般用户抢占系统资源而设置的一个限制

#打开一个程序放在后台,或者用图形界面打开
nice -n -5 vim & #用 ps 查看其优先级
ps -afxo user,ppid,pid,stat,pri,ni,time,command | grep vim

我们还可以用 renice 来修改已经存在的进程的优先级

renice -5 pid

 

linux:查看以及管理进程的更多相关文章

  1. Linux查看命令终止进程

    Linux查看命令终止进程 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps PID TTY TIME CMD 2576 pts/0 00:00:00 ba ...

  2. Linux查看用于终止进程命令

    Linux查看用于终止进程命令 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps PID TTY TIME CMD 2576 pts/0 00:00:00 ...

  3. Linux查看端口占用进程

    Linux查看端口占用进程 netstat -anlp|grep 8081 tcp /java 此处3195为进程ID

  4. windows和Linux查看端口占用进程并关闭

    Windows: 以端口8080为例: 1.查找对应的端口占用的进程:netstat  -aon|findstr  "8080"    ,找到占用8080端口对应的程序的PID号: ...

  5. Linux查看端口、进程情况及kill进程

    看端口: ps -aux | grep tomcat 发现并没有8080端口的Tomcat进程. 使用命令:netstat –apn 查看所有的进程和端口使用情况.发现下面的进程列表,其中最后一栏是P ...

  6. Linux 使用 Systemd 管理进程服务

    转载自:https://mp.weixin.qq.com/s/e-_PUNolUm22-Uy_ZjpuEA systemd 介绍 systemd是目前Linux系统上主要的系统守护进程管理工具,由于i ...

  7. linux查看主机端口进程命令

    1.查看主机信息 # more /etc/hosts # Do not remove the following line, or various programs # that require ne ...

  8. Linux 查看和删除进程

    1. 在 LINUX 命令平台输入 1-2 个字符后按 Tab 键会自动补全后面的部分(前提是要有这个东西,例如在装了 tomcat 的前提下, 输入 tomcat 的 to 按 tab).2. ps ...

  9. Linux查看端口、进程信息

    1.linux上如何查看端口 通常情况下,某个端口号会被莫名其妙的占用了.却不知道什么东东占用了,影响心情.通过如下命令,即可查看某一个端口号是否被占用 1)lsof -i:端口号,即可查看某一端口的 ...

随机推荐

  1. 浅谈iPhone OS(iOS)架构

    iPhone OS(现在叫iOS)是iPhone, iPod touch 和 iPad 设备的操作系统

  2. error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1800”

    _MSC_VER 定义编译器的版本.下面是一些编译器版本的_MSC_VER值:MS VC++ 10.0 _MSC_VER = 1600MS VC++ 9.0 _MSC_VER = 1500MS VC+ ...

  3. Java调用MQ队列

    IBM MQ 6.0中设置两个队列,(远程队列.通道之类都不设置). 队列管理器是XIR_QM_1502 队列名称是ESBREQ IP地址是10.23.117.134(远程的一台电脑,跟我的电脑不在一 ...

  4. 【Java并发编程四】关卡

    一.什么是关卡? 关卡类似于闭锁,它们都能阻塞一组线程,直到某些事件发生. 关卡和闭锁关键的不同在于,所有线程必须同时到达关卡点,才能继续处理.闭锁等待的是事件,关卡等待的是其他线程. 二.Cycli ...

  5. Java网络编程之TCP通信

    一.概述 Socket类是Java执行客户端TCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信.Socket类的方法会建立和销毁连接,设置各种Socket选项. Server ...

  6. (转)C语言中长度为0的数组

    前面在看Xen的源码时,遇到了一段代码,如下所示: 注意上面最后一行的代码,这里定义了一个长度为的数组,这种用法可以吗?为什么可以使用长度为0 的数组?长度为的数组到底怎么使用?……这篇文章主要针对该 ...

  7. hive异常:创建MySQL时Specified key was too long; max key length is 1000 bytes

    2015-11-13 14:44:44,681 ERROR [main]: DataNucleus.Datastore (Log4JLogger.java:error(115)) - An excep ...

  8. 保存对象时碰到的问题-列名 'Discriminator' 无效

    今天保存对象时碰到问题: {"列名 'Discriminator' 无效.\r\n列名 'Discriminator' 无效."}  百度了一下,百度找到的一个解决: http:/ ...

  9. Maven —— scope 元素的值及其含义

    1.compile 缺省值,所属依赖在所有的classpath中可用,同时它们也会被打包(随着项目一起发布). 2.provided 只有当JDK或者某个容器已提供该依赖之后才使用.如servlet. ...

  10. $.format,jquery.format 使用说明

    为jquery添加 format  功能 $.format = function (source, params) { if (arguments.length == 1) return functi ...