首页 > 代码库 > Linux基础(四)
Linux基础(四)
一、系统监控
1.用top命令实时监测CPU、内存、硬盘状态
效果类似Windows的任务管理器,默认每5秒刷新一下屏幕上的显示结果。
[root@localhost /]# top top - 17:39:47 up 45 min, 2 users, load average: 0.07, 0.05, 0.05 Tasks: 175 total, 3 running, 172 sleeping, 0 stopped, 0 zombie %Cpu(s): 14.0 us, 2.7 sy, 0.0 ni, 82.9 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st KiB Mem : 1875716 total, 883260 free, 511916 used, 480540 buff/cache KiB Swap: 2097148 total, 2097148 free, 0 used. 1160536 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2930 root 20 0 1491516 179012 49708 S 9.6 9.5 0:38.08 gnome-shell 1308 root 20 0 221852 29924 10696 R 5.0 1.6 0:12.65 Xorg 3442 root 20 0 573828 24200 15116 R 2.0 1.3 0:06.38 gnome-termi+ 670 root 20 0 4368 592 496 S 0.3 0.0 0:00.94 rngd 710 root 20 0 302644 6180 4804 S 0.3 0.3 0:04.39 vmtoolsd 2888 root 20 0 201268 3408 2756 S 0.3 0.2 0:00.29 at-spi2-reg+ 2900 root 20 0 1159540 23944 15760 S 0.3 1.3 0:00.95 gnome-setti+ 3044 root 20 0 377916 18660 14776 S 0.3 1.0 0:04.27 vmtoolsd 4276 root 20 0 157708 2256 1556 R 0.3 0.1 0:00.26 top 1 root 20 0 128092 6692 3944 S 0.0 0.4 0:02.37 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.16 ksoftirqd/0 6 root 20 0 0 0 0 S 0.0 0.0 0:00.18 kworker/u12+ 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 0:00.77 rcu_sched 10 root rt 0 0 0 0 S 0.0 0.0 0:00.03 watchdog/0
1)第一行是任务队列信息
分别是当前时间,系统运行时间,当前登录用户数,系统负载(三个数值分别是1min.5min.15min内的平均值)
2)第二、三行为进程和CPU的信息
分别是进程总数,正在运行的进程数,睡眠的进程数,停止的进程数,僵尸进程数,用户控件占CPU的百分比,内核空间占CPU的百分比,用户进程空间内改变优先级的进程占CPU的百分比,空闲CPU的百分比,等待输入输出的CPU时间的百分比,硬件中断占用CPU时间的百分比,软件中断占用CPU时间的百分比
僵尸进程:是指如果一个进程结束后,如果他的父进程没有等待或调用他,那么他就变成了僵尸进程,仍然占用CPU
3)第四、五行为内存信息
4)下面是进程信息
pid:进程ID
user:进程所有者的用户名
pr:优先级
ni:nice 值,负值表示高优先级,正值表示低优先级
virt:进程使用的虚拟内存总量,单位KB,VIRT=SWAP+RES
res:进程使用的、未被换出的物理内存大小,单位KB,RES=CODE+DATA
shr:共享内存大小,单位KB
s:进程状态。(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
command:命令名/命令行
cpu利用率与load average
cpu是用来干活的,按照这个层面去理解,每个码农都是一个cpu
cpu利用率:上一天班的时间是8个小时,而码农敲代码的时间为2个小时,2/8=0.25 ,25%就是码农在一天的时间内的利用率(正常情况,cpu利用率<70%)
cpu负载:公司在一分钟内为某个码农安排了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
存在1分钟,5分钟,15分钟三种cpu负载的原因是为了以一个更准确的方式来描述CPU的使用状态,如果仅是1分钟的CPU负载很高,5分钟或者15分钟后就降下来,那么就不用担心,如果CPU的使用率一直很高,那就需要提高硬件配置了。
在两种情况下会导致一个进程在逻辑上不能运行
1) 进程挂起是自身原因,遇到I/O阻塞,便要让出CPU让其他进程去执行,这样保证CPU一直在工作
2) 与进程无关,是操作系统层面,可能会因为一个进程占用时间过多,或者优先级等原因,而调用其他的进程去使用CPU。
2.free命令:检测系统已用和未用的内存空间总和
[root@localhost /]# free total used free shared buff/cache available Mem: 1875716 505684 890048 10752 479984 1166956 Swap: 2097148 0 2097148
使用free -w可以把buffer/cache拆开显示
使用free -h会以人类可读的方式显示
[root@localhost /]# free -h total used free shared buff/cache available Mem: 1.8G 517M 843M 10M 470M 1.1G Swap: 2.0G 0B 2.0G
buffer和cache的解释:
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管理。
像Windows这种成熟的系统,会多分配一些空间给cache以提高I/O的性能
available 表示cache能释放的内存+可作为suffer/cache的内存,直接就代表内存的剩余量
命令 while :; do free ; sleep 1 ; clear ;done可以实现动态监测
命令 echo 3 > /proc/sys/vm/drop_caches可以释放cache
3.进程的监测
用ps aux命令查看进程
用ps aux |head -n查看前n行
[root@localhost /]# ps aux |head -5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 128092 6692 ? Ss 16:54 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 root 2 0.0 0.0 0 0 ? S 16:54 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 16:54 0:00 [ksoftirqd/0] root 7 0.0 0.0 0 0 ? S 16:54 0:00 [migration/0]
用ps aux | grep‘top‘可以过滤包含‘top’字符的内容
[root@localhost /]# ps aux |grep ‘top‘ root 3035 0.0 1.5 1020224 29872 ? Sl 16:55 0:01 nautilus --no-default-window --force-desktop root 7548 0.0 0.0 112664 968 pts/1 R+ 18:54 0:00 grep --color=auto top
杀死一个进程用kill -9 PID命令
我们演示打开一个Firefox程序,然后用命令杀掉它,
[root@localhost /]# ps aux | grep ‘firefox‘ root 8384 7.6 10.1 2098636 190952 pts/1 Sl+ 18:59 0:05 /usr/lib64/firefox/firefox root 8762 0.0 0.0 112664 972 pts/2 R+ 19:00 0:00 grep --color=auto firefox [root@localhost /]# kill -9 8384
我们还可以以树状图的方式查看进程,用命令 pstree PID
t@localhost /]# pstree 2 kthreadd─┬─ata_sff ├─3*[bioset] ├─crypto ├─deferwq ├─fsnotify_mark ├─2*[hci0] ├─ipv6_addrconf ├─kauditd ├─kblockd ├─kdevtmpfs ├─2*[kdmflush] ├─khugepaged ├─khungtaskd ├─kintegrityd ├─kmpath_rdacd ├─kpsmoused ├─krfcommd ├─ksmd ├─ksoftirqd/0 ├─kswapd0 ├─kthrotld ├─kworker/0:0 ├─kworker/0:0H ├─kworker/0:1 ├─kworker/0:1H ├─kworker/0:2 ├─kworker/u128:1 ├─kworker/u128:2 ├─kworker/u129:0 ├─kworker/u129:1 ├─md ├─migration/0 ├─mpt/0 ├─mpt_poll_0 ├─netns ├─nfit ├─rcu_bh ├─rcu_sched ├─rpciod ├─scsi_eh_0 ├─scsi_eh_1 ├─scsi_eh_2 ├─scsi_tmf_0 ├─scsi_tmf_1 ├─scsi_tmf_2 ├─ttm_swap ├─watchdog/0 ├─writeback ├─xfs-buf/dm-0 ├─xfs-buf/sda1 ├─xfs-buf/sdb1 ├─xfs-cil/dm-0 ├─xfs-cil/sda1 ├─xfs-cil/sdb1 ├─xfs-conv/dm-0 ├─xfs-conv/sda1 ├─xfs-conv/sdb1 ├─xfs-data/dm-0 ├─xfs-data/sda1 ├─xfs-data/sdb1 ├─xfs-eofblocks/d ├─2*[xfs-eofblocks/s] ├─xfs-log/dm-0 ├─xfs-log/sda1 ├─xfs-log/sdb1 ├─xfs-reclaim/dm- ├─xfs-reclaim/sda ├─xfs-reclaim/sdb ├─xfs_mru_cache ├─xfsaild/dm-0 ├─xfsaild/sda1 ├─xfsaild/sdb1 └─xfsalloc
注意,centos7默认没有pstree,需要yum -y install psmisc命令来安装
二、硬盘格式化
当我们在虚拟机中新加入一块硬盘后,我们需要分区,然后格式化写入文件系统之后才能被我们使用
我们演示一下加入一块硬盘后的操作,在配置信息中加入一块15G的硬盘,重启系统
在Linux系统中,一切皆文件,硬盘对应的文件在/dev目录下,默认第一块硬盘为sda,第二块为sdb,.....
用fdisk -l /dev/sdb 查看第二块硬盘的信息
然后开始分区,用命令 fdisk /dev/sdb
n:新建分区
p:查看分区
w:保存
代码如下
[root@localhost ~]# fdisk -l /dev/sdb 磁盘 /dev/sdb:16.1 GB, 16106127360 字节,31457280 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 [root@localhost ~]# fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0xc23c658d 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1): 起始 扇区 (2048-31457279,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-31457279,默认为 31457279):+5G 分区 1 已设置为 Linux 类型,大小设为 5 GiB 命令(输入 m 获取帮助):n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): e 分区号 (2-4,默认 2): 起始 扇区 (10487808-31457279,默认为 10487808): 将使用默认值 10487808 Last 扇区, +扇区 or +size{K,M,G} (10487808-31457279,默认为 31457279): 将使用默认值 31457279 分区 2 已设置为 Extended 类型,大小设为 10 GiB 命令(输入 m 获取帮助):n Partition type: p primary (1 primary, 1 extended, 2 free) l logical (numbered from 5) Select (default p): l 添加逻辑分区 5 起始 扇区 (10489856-31457279,默认为 10489856): 将使用默认值 10489856 Last 扇区, +扇区 or +size{K,M,G} (10489856-31457279,默认为 31457279):+5G 分区 5 已设置为 Linux 类型,大小设为 5 GiB 命令(输入 m 获取帮助):p 磁盘 /dev/sdb:16.1 GB, 16106127360 字节,31457280 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xc23c658d 设备 Boot Start End Blocks Id System /dev/sdb1 2048 10487807 5242880 83 Linux /dev/sdb2 10487808 31457279 10484736 5 Extended /dev/sdb5 10489856 20975615 5242880 83 Linux 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。
然后我们格式化,把文件系统写入第一个分区即sdb1,命令为 mkfs.xfs /dev/sdb1/
代码如下
[root@localhost ~]# mkfs.xfs /dev/sdb1 meta-data=http://www.mamicode.com/dev/sdb1 isize=512 agcount=4, agsize=327680 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=1310720, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
挂载:
在根目录下新建一个part1文件夹,把/dev/sdb1 挂载到 /part1下,用命令mount /dev/sdb1 /part1
[root@localhost /]# mkdir /part1 [root@localhost /]# mount /dev/sdb1 /part1 [root@localhost /]# df 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/mapper/cl-root 17811456 4613280 13198176 26% / devtmpfs 921036 0 921036 0% /dev tmpfs 937856 144 937712 1% /dev/shm tmpfs 937856 9156 928700 1% /run tmpfs 937856 0 937856 0% /sys/fs/cgroup /dev/sda1 1038336 178584 859752 18% /boot tmpfs 187572 8 187564 1% /run/user/0 /dev/sr0 4236604 4236604 0 100% /run/media/root/CentOS 7 x86_64 /dev/sdb1 5232640 32944 5199696 1% /part1
用df命令查看硬盘使用情况,可以发现, /dev/sdb1 已经被挂载到 /part1中了
在centos 7 中采用xfs文件系统,与etc4相比处理大文件的性能有很大提升
需要理解的是,文件和文件夹都是文件系统提供的逻辑单位,真正可以保存数据的只有硬盘。
卸载:
umount /文件名
Linux基础(四)