Linux资源管理
Linux进程检测与控制
linux中对需要运维去管理、去查看的资源信息,如下:
内存资源、使用率 free 磁盘资源、使用率 df CPU资源、使用率 top htop # yum install -y htop glances # yum install -y glances 进程资源、使用率 ps pstree pidof 网络资源、使用率 Iftop 所有资源的整体查看命令 top glances htop
孤儿进程,僵尸进程
孤儿进程
父进程由于某原因挂了,代码写的不好,导致生成的一堆儿子进程,没有父亲了,成为了孤儿
- 系统有一个1号进程,等于是一个福利院,去收养这些孤儿进程(1号进程会去接替,管理这些孤儿进程的数据)你就能看到,这些孤儿进程,的ppid,就成了1号进程了
- 孤儿进程释放后,释放执行的相关文件,数据以及释放进程id号(系统id号是有固定的数量)
僵尸进程
子进程先于父进程退出,同时父进程太忙了,无瑕回收子进程的资源,子进程残留资源(PCB)存放于内核中,变成僵尸(Zombie)进程
[root@167 ~]# ps -ef|grep 30394
root 30394 30317 0 11:57 pts/1 00:00:00 python jiangshi.py
root 30395 30394 0 11:57 pts/1 00:00:00 [python] <defunct> #显示这个状态就是僵尸进程
还可以用top命令去看,有几个僵尸进程
PS
ps -ef
UID PID PPID C STIME TTY TIME CMD root 1 0 0 4月20 ? 02:07:32 /usr/lib/systemd/systemd --switched-root --system --deserialize 22 root 2 0 0 4月20 ? 00:00:32 [kthreadd] ps看到的进程命令,如果带有中括号[],那就是Linux内核自动生成的进程,不带中括号,就是发行版系统,用户来生成各种进程
UID 该进程执行的用户ID PID 进程ID PPID 该进程的父级进程ID,如果找不到,则该进程就被称之为僵尸进程(Parent Process ID) C Cpu的占用率,其形式是百分数 STIME 进程的启动时间 TTY 终端设备,发起该进程的设备识别符号,如果显示“?”则表示该进程并不是由终端设备发起 TIME 进程实际使用CPU的时间 CMD 该进程的名称或者对应的路径 ps aux
[root@chaogelinux ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 125452 3460 ? Ss 10月20 14:31 /usr/lib/systemd/systemd --system --deserialize 21 root 2 0.0 0.0 0 0 ? S 10月20 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 10月20 0:44 [ksoftirqd/0]
解释 USER:该进程属于的用户 PID:该进程号码 %CPU:进程占用CPU的资源比率 %MEM:该进程占用物理内存百分比 VSZ:进程使用的虚拟内存,单位Kbytes RSS:该进程占用固定的内存量,单位Kbytes TTY:该进程运行的终端位置 STAT:进程目前状态,可以man ps查看细节 R:正在运行中 S:终端睡眠中,可以被唤醒 D:不可中断睡眠 T:进程被暂停 Z:已停止,无法由父进程正常终止,变成了zombie僵尸进程 进程额外字符 +:前台进程,比如R+,程序运行在前台,一旦终止,程序结束,数据丢失。 I:多线程进程,如Sl表示程序是多线程 N:低优先级进程,如Sn表示优先级很低的进程 <:高优先级进程 s:进程领导者(含有子进程),如Ss表示父进程 L:锁定到内存中 START:进程启动时间 TIME:CPU运行时间 COMMAND:进程命令,名字带有[]表示内核态进程,没有[]表示是用户执行的进程。
TOP
1、top查看 CPU使用情况 命令:top 作用:查看服务器的进程占用的资源(100%使用) top操作快捷键 z::打开,关闭颜色 M(大写):表示将结果按照内存(MEM)从高到低进行降序排列; m(小写):切换内存memmory的显示格式。 P(大写):,表示将结果按照CPU 使用率从高到低进行降序排列; 1 :当服务器拥有多个cpu 的时候可以使用“1”快捷键来切换是否展示显示各个cpu 的详细信息; q:退出
第一行
内 容 说 明 17:13:00 系统当前时间 up 7:53 系统的运行时间.本机己经运行 13 小时 05 分钟 2 users 当前登录了三个用户 load average: 0.00, 0.01,0.05 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 第二行
Tasks: 236 total 系统中的进程总数 1 running 正在运行的进程数 235 sleeping 睡眠的进程数 0 stopped 正在停止的进程数 0 zombie 僵尸进程数。如果不是 0,则需要手工检查僵尸进程 第三行
内 容 说 明 Cpu(s): 0.1 %us 用户模式占用的 CPU 百分比 0.1%sy 系统模式占用的 CPU 百分比 0.0%ni 改变过优先级的用户进程占用的 CPU 百分比 99.9%id idle缩写,空闲 CPU 占用的 CPU 百分比 0.1%wa 等待输入/输出的进程占用的 CPU 百分比 0.0%hi 硬中断请求服务占用的 CPU 百分比 0.1%si 软中断请求服务占用的 CPU 百分比 0.0%st st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比 第四行
内 容 说 明 Mem: 8157208 total 物理内存的总量,单位为KB,目前是8157208/1024=7966MB≈8G 1143000 used 己经使用的物理内存数量。 4598168 free 空闲的物理内存数量。 2412392 buff/cache 作为缓冲的内存数量 第五行
内 容 说 明 Swap: 5242876 total 交换分区(虚拟内存)的总大小 0 used 已经使用的交换分区的大小 5242876 free 空闲交换分区的大小 6649640 avail Mem 可用内存
lsof查看进程打开了什么文件
常用参数 -c # 指定进程名,打开了哪些系统文件,如lsof -c nginx -i # 显示符合条件的进程,如ipv[46][protocol][@host|addr][:service|port] -p # 显示指定pid打开的文件 -u # 显示指定用户uid打开的文件,以及具体进程信息 +d # 显示文件夹下被打开的文件有哪些,如 lsof +d /var/log/nginx/ +D # 递归列出目录下哪些文件被进程打开 -n # 不显示主机名,直接显示ip -P # 不显示端口名,直接显示端口号 -s # 列出文件大小
# 直接输入lsof,显示当前用户打开的所有文件,过滤出你需要查找的文件,对应的进程 [root@yuchao-linux01 ~]# lsof |grep access.log # 查看占用文件的进程 [root@yuchao-linux01 log]# lsof /var/log/nginx/access.log # 查看指定pid号(父进程)打开了什么文件 [root@yuchao-linux01 log]# lsof -p $(cat /var/run/nginx.pid) # 查看指定程序名,打开的文件 [root@yuchao-linux01 log]# lsof -c nginx # 查看指定用户打开的文件 [root@yuchao-linux01 log]# lsof -u jerry01 # 查看指定目录打开的文件,以及递归查看 [root@yuchao-linux01 log]# lsof +d /var/log [root@yuchao-linux01 log]# lsof +D /var/log # 查看指定ip的网络连接情况(如有人访问了你的nginx) [root@yuchao-linux01 log]# lsof -i @192.168.0.240:80 # 查看指定TCP状态的连接情况 [root@yuchao-linux01 log]# lsof -n -P -i TCP -s TCP:LISTEN
kill关闭进程
常用信号
信号 解释 信号名 1 无须关闭进程,重新加载其配置文件,如reload操作 SIGHUP 2 中断,通常是ctrl+c发出此信号 SIGINT 3 退出,通常是ctrl + \ 发出信号 SIGQUIT 9 立即结束的信号,强制结束进程 SIGKILL 15 终止,通常是系统关机时候发送,正常结束进程,是kill默认信号 SIGTERM 20 暂停进程,通常是ctrl + z 发出信号 SIGTSTP
先确定进程id 再发送信号给进程 kill -1 pid # 进程重读配置文件 kill -15 pid # 进程优雅退出 kill -9 pid # 暴力干掉进程
Kill (结束指定pid的进程) killall (根据进程名杀死全部匹配的进程,不建议使用) pkill (根据进程名杀死全部匹配的进程,不建议使用)
进程运行
程序运行有2种
前台运行
程序运行在当前的终端,所有的信息都输出到屏幕上,占用你的终端,你也无法继续使用;如果终端异常关闭,导致程序会自动退出
后台运行
不会占用你的终端,程序在系统后台跑着,你该干啥干啥,终端关了,程序也继续运行。后台运行命令
command & # 未启动的command放入后台去运行 jobs # 查看后台进程列表 ctrl + z # 暂停进程 bg 1 # 程序放入后台运行,和 & 一样 fg 1 # 将后台任务放入前台执行
nohup命令
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下 如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out 文件中。 一般和 & 后台符,结合使用。nohup不加&后台符的话还是前台运行
语法nohup command 选项 & Command:要执行的命令。 Arg:一些参数,可以指定输出文件。 &:让命令在后台执行,终端退出后命令仍旧执行。
理解linux的数据流
执行linux命令时,linux默认为用户进程提供了3种数据流
stdin 标准输入:0 一般是键盘输入数据 比如cat命令等待用户输入 stdout 标准输出:1 程序执行结果,输出到终端 stderr 标准错误输出:2 程序执行结果,输出到终端
标准输入 cat 接收键盘的输入数据,然后打印到终端,直到ctrl +d 结束输入 [root@yuchao-tx-server ~]# cat hello hello 标准输出 [root@yuchao-linux01 ~]# ls /opt/ HelloWorld.class HelloWorld.java jdk jdk1.8.0_221 jdk-8u221-linux-x64.tar.gz passwd 标准错误输出 [root@yuchao-linux01 ~]# ls /opppp > stderr.txt ls: cannot access /opppp: No such file or directory
输出重定向
输出重定向是指把命令(或可执行程序)的
标准输出
或标准错误输出
重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。
使用 “ > ”符号,将标准输出重定向到文件中。形式为:命令>文件名 使用“ >> ”符号,将标准输出结果追加到指定文件后面。形式为:命令>>文件名 使用“ 2> ”符号,将标准错误输出重定向到文件中。形式为:命令 2> 文件名 使用“ 2>> ”符号,将标准错误输出追加到指定文件后面。形式为:命令 2>>文件名 使用“ 2>&1 ”符号或“ &> ”符号,将把标准错误输出stderr重定向到标准输出stdout 使用“ >/dev/null ”符号,将命令执行结果重定向到空设备中,也就是不显示任何信息。
2>&1 解释
将stderr重定向到stdout,就可以防止程序运行出错,导致程序异常 写法1 [root@yuchao-tx-server ~]# echhhho '超哥带你学linux' &>> test.log 写法2 [root@yuchao-tx-server ~]# echhhho '超哥带你学linux' >> test.log 2>&1 (写法2使用的人更多) 黑洞文件,空设备文件,也同样遵循,stdout、stderr的语法 [root@yuchao-tx-server ~]# echo '超哥带你学linux' &>> /dev/null [root@yuchao-tx-server ~]# echhhhho '超哥带你学linux' &>> /dev/null
CPU压力测试
查看cpu信息
查看有几颗cpu: cat /proc/cpuinfo |grep 'core id'|uniq |wc -l 查看cpu核数: lscpu |grep -i '^cpu(s)'或者输入top按下数字1,查看几核
如何理解uptime看到的负载
分别是1、5、15分钟内的平均负载情况,表示是1~15分钟内CPU的负载变化情况。 1. 三个值如果差不多,表示系统很稳定的运行中,15分钟以内,CPU都没有很忙 2. 如果1分钟内的值,远大于15分钟的值,表示机器在1分钟内压力在直线上升 3. 如果1分钟内的值,小于15分钟的值,表示系统的负载正在下降中
测试cpu
1.安装stress工具 yum install stress -y 2.测试cpu stress --cpu 4 --timeout 600 启动4个进程持续占用cpu
free查看内存使用情况
命令:free 作用:查看内存使用情况 选项: -m 表示以mb为单位查看(1g = 1024mb,1mb = 1024kb) -h 以可读形式显示容量,需要free -V显示版本大于3.3
free 命令主要是用来查看内存和 swap 分区的使用情况的,其中: total:是指物理内存总大小,信息来自于/proc/meminfo used:是指已经使用的内存,userd=total-free-buffers-cache free:是指空闲的;free = total - used - buff - cache shared:是指共享的内存;用于tmpfs系统 buff/cache buffers:缓冲区,给写入数据加速的,用于内存和磁盘之间的数据写入缓冲,存放内存需要写入到磁盘的数据。 cached:缓存区,给读取数据时加速的,加快CPU和内存数据交换,存放内存已经读取完毕的数据。 关于第二行的swap,现状是完全关掉这个功能的。 第2行数据是Swap交换分区,也就是我们通常所说的虚拟内存(硬件交换分区)。 防止内存用完导致系统崩溃,临时拿硬盘的一些空间当做内存使。
磁盘管理
df 查看磁盘信息 作用:查看磁盘的空间(disk free) 选项:-h表示可读性较高的形式展示大小
Filesystem 磁盘名称(文件系统名称) Size 总大小,总容量 Used 已经使用的容量 Avail 剩余可用容量 Use% 使用百分比 Mounted on 挂载路径(相当于Windows 的磁盘符)(访问挂载点即可访问到该设备的数据) 磁盘io监控(iotop)
1.安装iotop [root@yuchao-linux01 ~]# yum install iotop -y 2.常用命令参数 -o:只显示有io操作的进程 -b:批量显示,无交互,主要用作记录到文件。 -n NUM:显示NUM次,主要用于非交互式模式。 -d SEC:间隔SEC秒显示一次。 -p PID:监控的进程pid。 -u USER:监控的进程用户。 -k 以kB单位显示读写数据信息 3.常用快捷键 左右箭头:改变排序方式,默认是按IO排序。 r:改变排序顺序。 o:只显示有IO输出的进程。 p:进程/线程的显示方式的切换,切换pid、tid a:显示累积使用量 q:退出。 实践 1.显示默认信息 [root@yuchao-linux01 ~]# iotop 2.以kb单位显示io进程 [root@yuchao-linux01 ~]# iotop -k
网络协议
TCP
UDP
netstat查看进程网络访问
命令:netstat 作用:查看网络连接状态 语法:netstat -tnlp 选项: -t:表示只列出tcp协议的连接; -n:表示将地址从字母组合转化成ip 地址,将协议转化成端口号来显示; -l:表示过滤出"state(状态)"列中其值为LISTEN(监听)的连接; -p:表示显示发起连接的进程pid 和进程名称; -u:表示查看udp协议连接(ntpd服务) Protocol:协议(tcp、upd、http、https、icmp、ssh…) Receive:接收 Send:发送 Local Address:本地地址 Foreign:远程地址 State:状态,LISTEN表示侦听来自远方的TCP端口的连接请求 PID/Program name:进程ID和程序名
ss命令
ss 是类似netstat的工具。能显示查看网络状态信息,包括TCP、UDP连接,端口 并且性能远比netstat强悍,适合用于高并发服务器查看 -a 显示所有网络连接 -l 显示LISTEN状态的连接(连接打开) -m 显示内存信息(用于tcp_diag) -n, --numeric 不显示域名,直接显示ip地址 -o 显示Tcp 定时器x -p 显示进程信息 -s 连接统计 -d 只显示 DCCP信息 (等同于 -A dccp) -u 只显示udp信息 (等同于 -A udp) -w 只显示 RAW信息 (等同于 -A raw) -t 只显示tcp信息 (等同于 -A tcp) -x 只显示Unix通讯信息 (等同于 -A unix) -4 只显示 IPV4信息 -6 只显示 IPV6信息 --help 显示帮助信息 --version 显示版本信息
网络流量监控命令iftop
标签:查看,资源管理,yuchao,内存,Linux,进程,root,CPU From: https://www.cnblogs.com/chunjeh/p/17550543.html作用和top和iotop一样,动态显示机器上,网卡的流量动态
yum install iftop -y