1) top命令的功能:top命令是Linux下经常使用的性能分析工具,可以实时显示系统中各个进程的资源占用情况,相似于Windows的任务管理器。node
2) 使用top命令列出系统状态时,系统默认每5秒刷新一下屏幕上的显示结果。linux
top - 14:44:15 up 6:41, 1 user, load average: 0.02, 0.03, 0.05windows
Tasks: 330 total, 2 running, 328 sleeping, 0 stopped, 0 zombiecentos
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st数组
KiB Mem : 1867636 total, 1284776 free, 86760 used, 496100 buff/cache数据结构
KiB Swap: 0 total, 0 free, 0 used. 1622824 avail Mem函数
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 工具
2859 root 20 0 157816 2412 1552 R 0.7 0.1 0:00.22 top 性能
276 root 20 0 0 0 0 S 0.3 0.0 0:32.77 kworker/0:1 测试
14:44:15 |
当前时间 |
up 6:41 |
系统运行时间,格式为时:分 |
1 user |
当前登陆用户数 |
load average: 0.02, 0.03, 0.05 |
系统负载。 三个数值分别为 1分钟、5分钟、15分钟前到如今的平均值。 |
Tasks: 29 total |
进程总数 |
1 running |
正在运行的进程数 |
328 sleeping |
睡眠的进程数 |
0 stopped |
中止的进程数 |
0 zombie |
僵尸进程数 |
Cpu(s): 0.0% us |
用户空间占用CPU百分比 |
0.3% sy |
内核空间占用CPU百分比 |
0.0% ni |
用户进程空间内改变过优先级的进程占用CPU百分比 |
99.7% id |
空闲CPU百分比 |
0.0% wa |
等待输入输出的CPU时间百分比 |
0.0% hi |
硬件中断占用CPU时间的百分比 |
0.0% si |
软件中断占用CPU时间的百分比 |
KiB Mem : 1867636 total, 1284776 free, 86760 used, 496100 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1622824 avail Mem
列名 |
含义 |
PID |
进程id |
PPID |
父进程id |
RUSER |
Real user name |
UID |
进程全部者的用户id |
USER |
进程全部者的用户名 |
GROUP |
进程全部者的组名 |
TTY |
启动进程的终端名。不是从终端启动的进程则显示为 ? |
PR |
优先级 |
NI |
nice值。负值表示高优先级,正值表示低优先级 |
P |
最后使用的CPU,仅在多CPU环境下有意义 |
%CPU |
上次更新到如今的CPU时间占用百分比 |
TIME |
进程使用的CPU时间总计,单位秒 |
TIME+ |
进程使用的CPU时间总计,单位1/100秒 |
%MEM |
进程使用的物理内存百分比 |
VIRT |
进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
SWAP |
进程使用的虚拟内存中,被换出的大小,单位kb。 |
RES |
进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
CODE |
可执行代码占用的物理内存大小,单位kb |
DATA |
可执行代码之外的部分(数据段+栈)占用的物理内存大小,单位kb |
SHR |
共享内存大小,单位kb |
nFLT |
页面错误次数 |
nDRT |
最后一次写入到如今,被修改过的页面数。 |
S |
进程状态。 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/中止 Z=僵尸进程 |
COMMAND |
命令名/命令行 |
WCHAN |
若该进程在睡眠,则显示睡眠中的系统函数名 |
Flags |
任务标志,参考 sched.h |
cpu是用来干活的,按照这个层面去理解,每一个码农都是一个cpu
上一天班的时间是8个小时,而码农敲代码的时间为2个小时,2/8=0.25 ,25%就是码农在一天的时间内的利用率(正常状况,cpu利用率<70%)
公司在一分钟内为某个码农安排了3个任务,而1分钟内该码农能作6个任务,那么该码农一分钟内的负载为0.5
若是公司在5分钟内为某个码农安排了100个任务,而5分钟内该码农只能作50个任务,那么该码农5分钟内的负载为2.0,即超负荷运转
cpu负载<=1:能正常应付
cpu负载>1:超负荷运转
若是有4核,至关于将100个任务交给4个码农去干,若是每一个码农的负载都是100%,那么总体的cpu负载达到4.0则是很正常的现象
多核cpu, load average 应该 <= cpu核数 * 0.7
其实之因此要给出3个值,就是但愿咱们能结合起来看。或者说但愿展现一个动态的图表式的数据,好比最近一分钟显示负载120%。而最近5分钟和15分钟显示负载为50%。可能你不用太过担忧。可是若是你发现系统的负载一直维持在120%以上,就必需要提升硬件配置了。
cpu利用率和cpu负载太高,都是很差的现象,可是也有可能出现,低利用率,高负载的状况:
为一个码农分配了100个项目,毫无疑问,该码农的负载是很高的,可是码农在具体去作一个项目时,可能会碰到须要购买机器,或者查询资料等耗费时间的问题,真正动手写代码的时间可能很短,而这段时间才是码农真正为公司干活的时间,若是每一个项目都有相似这种问题,那么100个项目加到一块儿,码农真正工做的时间也不会太多,这就形成了低利用率。
1. 进程挂起是自身缘由,遇到I/O阻塞,便要让出CPU让其余进程去执行,这样保证CPU一直在工做
2. 与进程无关,是操做系统层面,可能会由于一个进程占用时间过多,或者优先级等缘由,而调用其余的进程去使用CPU。
于是一个进程有三种状态
命令的功能:显示内存的使用状态。(下图centos6中查看效果,用二维数组表明FO即free output)
1 2 3 4 5 6
1 total used free shared buffers cached
2 Mem: 24677460 23276064 1401396 0 870540 12084008
3 -/+ buffers/cache: 10321516 14355944
4 Swap: 25151484 224188 24927296
物理内存FO[2][1]=24677460KB
物理内存被使用的内存FO[2][2]=23276064KB
能够用内存F[2][3]=1401396KB
等式:FO[2][1] = FO[2][2] + FO[2][3]
共享内存F[2][4]=0,表示几个进程共享的内存(数据共享)
F[2][5]=870540表示已经分配可是还未使用的buffers大小
F[2][6]=12084008表示已经分配可是还未使用的buffers大小
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.
也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这两者是为了提升IO性能的,并由OS管理。
Linux和其余成熟的操做系统(例如windows),为了提升IO read的性能,老是要多cache一些数据,这也就是为何FO[2][6](cached memory)比较大,而FO[2][3]比较小的缘由。作一个简单的测试:
1)释放掉被系统cache占用的数据;
echo 3>/proc/sys/vm/drop_caches
2)读一个大文件,并记录时间;
3)关闭该文件;
4)重读这个大文件,并记录时间;
第二次读应该比第一次快不少。
free输出的第二行是从一个应用程序的角度看系统内存的使用状况。
由于被系统cache和buffer占用的内存能够被快速回收,因此一般FO[3][3]比FO[2][3]会大不少。
这里还用两个等式:
free命令的全部输出值都是从/proc/meminfo中读出的。
显示内存的使用状态。(下面均为centos7中查看效果)
http://www.linuxatemyram.com/提到使用free命令查看Linux系统使用内存时,used一项会把当前cache的大小也会加进去,这样会形成free这一栏显示的内存特别少:
$ free -m
total used free shared buff/cache available
Mem: 1504 1491 13 0 855 869
Swap: 2047 6 2041
但是实际上,cache根据应用程序的须要是能够回收利用的,所以free这一栏并不能真实地表现有多少“可使用”的内存。实际系统可用内存应该以available数据为准。
linuxatemyram所提到的free命令也许是比较老的版本,RHEL 7.2,Ubuntu 16.04和Arch Linux这3个Linux发行版,均没有出现used包含cache的状况:
$ free -m
total used free shared buff/cache available
Mem: 64325 47437 3150 1860 13737 14373
另外,从man free命令中也能够获得,目前计算used的值是要减掉free和buff/cache的:
used Used memory (calculated as total – free – buffers – cache)
可使用-w命令行选项获得buff和cache各自使用的数量:
$ free -wm
total used free shared buffers cache available
Mem: 64325 48287 2476 1859 1430 12131 13524
须要注意的是,free表示的是当前彻底没有被程序使用的内存;而cache在有须要时,是能够被释放出来以供其它进程使用的(固然,并非全部cache均可以释放,好比当前被用做ramfs的内存)。而available才真正代表系统目前能够提供给应用程序使用的内存。/proc/meminfo从3.14内核版本开始提供MemAvailable的值;在2.6.27~3.14版本之间,是free程序本身计算available的值;早于2.6.27版本,available的值则同free同样。
(详见linux系统管理P363)
1) 进程的定义:进程是程序的一次动态执行。
2) 守护进程的定义:守护进程是在后台运行并提供系统服务的一些进程。
3) 父进程、子进程的定义:当一个进程建立另外一个进程时,第1个进程被称为新进程的父进程,而新进程被称为子进程。
4) ps命令的功能:用来显示当前进程的状态。
ps –aux 显示全部的与用户相关的完整信息
centos7默认没有pstree,须要yum -y install psmisc
1) pstree命令的功能:以树状图显示程序。
2) pstree命令的用法举例:
例如:列出PID为4729的进程的进程状态树的命令:
pstree 4729
3) kill命令的功能:把一个信号发送给一个或多个进程。默认发送终止信号。
4) 应用kill命令终止进程
例如:终止PID为3852的进程的命令:
kill 3852
5) 应用kill -9命令杀死进程
例如:杀死PID为3906的进程的命令:
kill -9 3906
1. pgrep命令的功能:经过名称或其余属性查找进程
例如:查找名为firefox的进程的命令为:
pgrep firefox
pkill命令的功能:经过名称或其余属性发信号给进程
例如:杀死名为firefox的进程的命令为:
pkill firefox
(详见linux系统管理P297)
1) 在Linux系统中,每一个设备都被当初一个文件来对待。
2) 各类设备在Linux中的文件名
(详见linux系统管理P301)
1) 为何要进行硬盘分区:
a) 更容易管理和控制系统,由于相关的文件和目录都放在一个分区中。
b) 系统效率更高。
c) 能够限制用户使用硬盘的份额(磁盘空间的大小)。
d) 更容易备份和恢复。
2) 硬盘的逻辑结构:一个硬盘逻辑上能够被划分红块、磁道、磁柱和分区。
3) 块的定义:块是盘片上寻址(访问)的最小单位,一个块能够存储必定字节的数据。
4) 磁道的定义:磁道是由一系列头尾相连的块组成的圆圈。
5) 磁柱的定义:磁柱是由一叠磁道,由在相同半径上每一个盘面的磁道所组成。
6) 分区的定义:分区是由一组相邻的磁柱所组成。
(详见linux系统管理P303)
1) 硬盘分区的分类:硬盘的分区能够分为主分区、扩展分区和逻辑分区。
2) 主分区的数量:在一个硬盘上最多能够划分出4个主分区。
3) Linux操做系统的内核支持每一个硬盘上的分区数量仍是有必定限制的,Linux内核在每一个硬盘上能够最多支持:
a) 在SCSI硬盘上划分15个分区(Partitions)。
b) 在IDE硬盘上划分63个分区(Partitions)。
(详见linux系统管理P394)
1) fdisk命令的功能:建立磁盘分区。
2) fdisk命令列表中经常使用的命令:
a) d:删除一个(已经存在的)分区,其中d是delete的第1个字母。
b) l:列出(已经存在的)分区的类型,其中l是list的第1个字母。
c) m:列出fdisk中使用的全部命令,其中m是menu的第1个字母。
d) n:添加一个新的分区,其中n是new的第1个字母。
e) p:列出分区表的内容,其中p是print的第1个字母。
f) q:退出fdisk,可是不存储所作的变化,其中q是quit的第1个字母。
g) t:改变分区系统的id,其中t是title的第1个字母。
h) w:退出fdisk并存储所作的变化,其中w是write的第1个字母。
3) partprobe命令的功能:从新初始化内存中内核的分区表。
(详见linux系统管理P399)
1) 格式化的定义:所谓的格式化就是将分区中的硬盘空间划分红大小相等的一些数据块(Blocks),以及设定这个分区中有多少个i节点可使用等。
2) 文件系统的定义:文件系统是操做系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。
3) 经常使用的文件系统类型
ext2:Linux系统中标准的文件系统
ext3:一种日志式文件系统
ext4:一种针对ext3系统的扩展日志式文件系统
lvm:逻辑盘卷管理
iso9660:目前惟一通用的光盘文件系统
4) mkfs命令的功能:格式化磁盘。
5) 经常使用的格式化命令:
mkfs.文件系统类型
例如,将分区/dev/sdb1格式化为ext4文件系统的命令为:
mkfs.ext4 /dev/sdb1
(详见linux系统管理P405)
1) e2label命令的功能:设定或查看一个设备的label名称。
2) 用e2label命令设定label:
a) 例如:查看/dev/sdb1分区的label的命令为:
e2label /dev/sdb1
b) 例如:将/dev/sdb1分区的label设定为wg的命令:
e2label /dev/sdb1 wg
(详见linux系统管理P406)
1) 挂载的定义:挂载指将一个设备(一般是存储设备)挂接到一个已存在的目录上。
2) mount命令的功能:实现文件系统的挂载。
3) 用mount命令实现文件系统的挂载:
例如:将/dev/sdb1分区挂载到/wg目录上的命令:
mount /dev/sdb1 /wg
4) umount命令的功能:实现文件系统的卸载。
5) 用umount命令实现文件系统的卸载:
例如:卸载/wg上的文件系统的命令:
umount /wg
umount -l /wg #-l参数,强制卸载
(详见linux系统管理P414)
1) 虚拟内存的定义:所谓虚拟内存就是一块硬盘空间被当作内存使用,也被称为交换分区(swap)。
2) Linux交换分区的类型为:0x82
3) mkswap命令的功能:设置交换分区。
4) 使用mkswap命令设置交换分区的用法举例:
例如:将分区/dev/sdb2设置为交换分区的命令:
mkswap /dev/sdb2
5) swapon命令的功能:启动交换分区。
6) swapon –a命令的功能:启动所有的交换分区。
7) swapon –s命令的功能:列出当前正在使用的全部系统交换分区的状态。
8) 使用swapon命令的用法举例:
例如:启用交换分区/dev/sdb2的命令:
swapon /dev/sdb2
(详见linux系统管理P170)
inode节点的定义:i节点其实是一个数据结构,它存放了有关一个普通文件、目录或其余文件系统对象的基本信息。
(详见linux系统管理P174)
1) 符号连接的定义:符号连接是指向另外一个文件的一个文件。
2) ln命令建立软链接的用法举例:
a) 为wolf/dog.wolf.baby文件创建一个dog_ wolf.boy符号连接并放在bodydog目录中的命令:
ln –s wolf/dog.wolf.baby bodydog/dog_ wolf.boy
(详见linux系统管理P179)
1) 硬连接的定义:一个硬连接(hard link)是一个文件名与一个i节点之间的对应关系,也能够认为一个硬连接是在所对应的文件上添加了一个额外的路径名。
2) ln命令建立硬链接的用法举例:
a) 为wolf/wolf.dog文件在backup目录中创建一个名为wolf.dog2的硬连接命令:
ln wolf/wolf.dog backup/wolf.dog2
(详见linux系统管理P183)
1) Linux系统中常见的文件类型:
-:普通文件(regular file),也有人称为正规文件。
d:目录(directory)。
l:符号(软)连接。
b:块特殊文件(b是block的第1个字符),通常指块设备,如硬盘。
c:字符特殊文件(c是character的第1个字符),通常指字符设备,如键盘。
(详见linux系统管理P185)
1) df命令的功能:显示文件系统中磁盘使用和空闲区的数量。
-a 显示全部磁盘
-h 单位转换
2) du命令的功能: 显示目录和文件的大小a h同上