首页 > 其他分享 >资源管理

资源管理

时间:2024-01-14 17:12:32浏览次数:29  
标签:linux01 log 0.0 yuchao 进程 root 资源管理

进程与资源管理

windows资源管理器

在运维的日常工作中,监视系统的运行状况是每天例行的工作,一个服务器的健康,从主要的几个资源使用率上,就可以得出结论,比如CPU使用率、内存使用率,磁盘使用率。

在 Windows 中我们可以很直观的使用"任务管理器"来进行进程管理,了解系统的运行状态

通常,使用"任务管理器"主要有 3 个目的:
利用"应用程序"和"进程"标签来査看系统中到底运行了哪些程序和进程;
利用"性能"和"用户"标签来判断服务器的健康状态;
在"应用程序"和"进程"标签中强制中止任务和进程;

查看windows的进程信息

查看内存使用率,内存是系统及其重要的一个资源,内存大小,基本上决定了你电脑能打开多少个应用程序,所以你想同时听课、写代码、学于超老师的linux课,做笔记,聊微信,这么多事,需要你的内存足够大,打得开这么多软件。否则就会出现,卡死,内存不足,无法运行软件

linux资源管理器

linux中对需要运维去管理、去查看的资源信息,如下
内存资源、使用率
free命令
磁盘资源、使用率
df
CPU资源、使用率
top
htop
glances
进程资源、使用率
ps
pstree
pidof
网络资源、使用率
Iftop
所有资源的整体查看命令
top
glances
htop

什么是进程

进程是正在执行的一个程序或命令,每个进程都是一个运行的实体,并占用一定的系统资源
程序是人使用计算机语言编写的可以实现特定目标或解决特定问题的代码集合

什么是进程,线程

进程,是资源单位(包工头)
线程,是工作单位(干活的工人)

什么是父亲进程,儿子进程


我们登录的xshell终端,是这样的流程

  1. 系统上运行了sshd服务
  2. 通过ssh客户端命令,都是去连接这个服务,产生的一堆子进程而已

理解linux的启动进程关系

理解你是如何登录了linux,以及后续的命令执行,进程关系

linux系统启动产生的 1号进程
↓
运行了sshd服务,xxx进程
↓
ssh远程连接,xxx进程
↓
/bin/bash 进程,xxx进程
↓
后续各种命令 ,xxx进程,命令1,命令2,命令3

# 打开3个ssh会话窗口,一个用于查看进程,2个用于 使用vim命令操作,用ps,查看他们的父子关系

1.1进程、程序的关系

1. 开发把代码写好了,打个压缩包给你,还未运行的时候,这就是个静态、程序源代码,程序是数据和指令的集合。
2. 当运维将开发的代码运行起来之后,就称之为进程(机器上一个在运行的程序)
3. 程序运行时,系统为了清晰的标记每一个进程,为其分配了PID、运行的用户、内存、CPU等使用情况。

1.2 进程fork概念

1.我们的操作系统都是一堆进程而已,系统运行时,就产生了0号进程,然后其他进程都是0号进程创建的子进程。
2.linux启动之后,第一个进程就是PID为0,然后通过0号进程fork()出其他的进程。
3.操作系统的运行,就是不断的创建进程、以及销毁进程。

1.3 孤儿进程

父进程挂掉后,子进程归1号进程所属,此时的父进程为1号,1号进程好比是孤儿院,专门处理孤儿进程的善后工作,因此孤儿进程不会对系统产生什么危害。

# 于超老师教你用python实现,孤儿进程。

[root@yuchao-linux01 ~]# cat guer.py
#coding:utf-8
import os
import sys
import time

pid = os.getpid()
ppid = os.getppid()
print 'im father: ', 'pid: ', pid, 'ppid: ', ppid
son_pid = os.fork()
print('now song_pid is: ',son_pid)
#执行pid=os.fork()则会生成一个子进程
#返回值pid有两种值:
#    如果返回的pid值为0,表示在子进程当中
#    如果返回的pid值>0,表示在父进程当中
if son_pid > 0:
    print 'father going die...'
    # 让老父亲,主动退出,挂掉
    sys.exit(0)

# 保证主线程退出完毕
# 程序延迟了1秒,还在运行中,儿子进程还未挂,成了孤儿
time.sleep(2)5

print 'im child: ', os.getpid(),'now my father is: ', os.getppid()

查看孤儿进程

[root@yuchao-linux01 ~]# python guer.py
im father:  pid:  1953 ppid:  1930
('now song_pid is: ', 1954)
father going die...
('now song_pid is: ', 0)
[root@yuchao-linux01 ~]# im child:  1954 now my father is:  1

[root@yuchao-linux01 ~]#

1.4 僵尸进程

子进程挂掉,父进程并不知道子进程挂掉,就无法回收子进程,一直在系统中占着,成了可怕的僵尸进程,会对系统产生危害。你可以通过ps命令找到它,并且它的状态是(Z,zombie僵尸进程)
如果系统中产生大量僵尸进程,占据了系统中大量可分配的资源,如进程id号,系统就无法再正确创建新进程,完成任务,导致系统无法使用的危害。

理解僵尸进程

验证僵尸进程的确存在
[root@yuchao-linux01 ~]# ps -ef|grep 2086 |grep -v grep
root       2086   2051  0 14:47 pts/1    00:00:00 python zombie.py
root       2087   2086  0 14:47 pts/1    00:00:00 [python] <defunct>

[root@yuchao-linux01 ~]# ps aux|grep Z |grep -v grep
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       2087  0.0  0.0      0     0 pts/1    Z+   14:47   0:00 [python] <defunct>

1.4.1解决僵尸进程

1. 可以主动kill 父亲进程pid
2. 如果程序会自动结束的话,比如time.sleep()时间到期,也会退出所有进程。优化代码,不要再写这种垃圾代码了,把unix高级编程,好好学学

二 进程管理命令

1、top查看 CPU使用情况

命令:top
作用:查看服务器的进程占用的资源(100%使用)
语法:# top (动态显示)
top操作快捷键
z::打开,关闭颜色
M(大写):表示将结果按照内存(MEM)从高到低进行降序排列;
m(小写):切换内存memmory的显示格式。
P(大写):,表示将结果按照CPU 使用率从高到低进行降序排列;
1 :当服务器拥有多个cpu 的时候可以使用“1”快捷键来切换是否展示显示各个cpu 的详细信息;
q:退出
系统整体信息:
①第一行


按下键盘字母上方的数字1,可以显示多核CPU状态

虚拟机的硬件信息,通过vmware设置

②第二行


③第三行


④第四行

内存使用率,若是觉得数字不够直观,按下小写m键,切换显示

⑤第五行


swap分区是一块特殊的硬盘空间==,当实际内存不够用的时候,操作系统会从磁盘中取出一部分暂时不用的数据,放在交换内存中,从而使当前的程序腾出更多的内存量。
Linux中Swap(即:交换分区),类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况

2)具体进程信息

ps进程区域信息,字段解释

问:如果发现服务器的CPU何负载过大,怎么办?
执行top命令,按下P,查看CPU使用最多的进程是哪一个,它是干什么的这个任务,然后决定下一步的处理。
问题:如果发现内存空闲率很低,内存不够用了,怎么办
top命令,看下大写M,查看内存使用率排行,从高到低排列

1.1 htop命令

比top好用

#安装命令
[root@chaogelinux ~]# yum install htop -y

1.直接输入htop命令,进入画面,各项指标和top相似

2.调整htop风格

1. 进入htop
2. 按下F2(setup),进入设置,针对Meters,记录可以修改记录显示风格
3. 上下左右,移动,状态栏会发生变化(空格键,更改风格)
4. 按下回车键,可以选择添加表(meters)
5. F10保存
6. htop能够记忆用户的设置

3.搜索进程

按下f3,输入进程名字,即可找到进程

杀死进程

定位到想要杀死进程的哪一行,按下F9
选择发送给进程的信号,一般是15,正常中断进程
回车,进程就挂了


5.显示进程树,F5。
6.其他快捷键

    M:按照内存使用百分比排序,对应MEM%列;
    P:按照CPU使用百分比排序,对应CPU%列;
    T:按照进程运行的时间排序,对应TIME+列;
    K:隐藏内核线程;
    H:隐藏用户线程;
    #:快速定位光标到PID所指定的进程上。      
    /:搜索进程名

2、ps查看进程

命令:ps(process status 进程状态)
语法:ps [参数选项]
作用:主要是查看服务器的进程信息,并且是打印当前的运行状态快照,而不是实时的监控,只是某一时刻的系统进程信息。
2.1 ps参数

参数风格,请注意,参数的位置,存在先后关系,位置错误可能导致无法使用。

# UNIX风格,没有短横线
a # 显示所有终端、所有用户执行的进程
u # 以用户显示出进程详细信息
x # 显示操作系统所有进程信息
f # 显示进程树形结构
o # 格式化显示进程信息,指定如pid
k # 对进程属性排序,如k %mem  ,正序排序   ,k -%mem 逆序
--sort,再进行排序,如 --sort %mem 根据内存使用率显示


linux标准参数用法
-e # 显示所有进程
-f # 显示进程详细
-p # 指定pid,显示其信息,如 ps -fp 2609
-C # 指定进程的名字查看,如ps -fC sshd
-U # 指定用户名,查看用户进程信息 ps -Uf yuchao01

ps -ef

[root@yuchao-linux01 ~]# ps -ef | head -1
UID         PID   PPID  C STIME TTY          TIME CMD


[root@yuchao-linux01 ~]# ps -ef |tail -5
root       3001      2  0 16:34 ?        00:00:00 [kworker/1:2]
root       3235      2  0 16:37 ?        00:00:00 [kworker/0:0]
jack01     3253   2629  0 16:37 pts/0    00:00:00 sleep 1
root       3254   2051  0 16:37 pts/1    00:00:00 ps -ef
root       3255   2051  0 16:37 pts/1    00:00:00 tail -5

场景:当运维小于在公司里,发现监控报警了,给自己的微信发了个通知,应用服务器CPU使用率超过85%,自己得抓紧看看是什么问题。

1.查看top,进行CPU使用率排行最高的进程信息
top
2.查看ps -ef命令,再grep过滤出,你想要的信息。

ps aux
组合命令,使用BSD语法显示进程信息
解释

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:进程命令,名字带有[]表示内核态进程,没有[]表示是用户执行的进程
ps结合grep

grep取反
语法
grep -v 选项,取反

[root@yuchao-linux01 ~]# ps -ef|grep vim |grep -v grep
root      20313  19658  0 20:38 pts/0    00:00:00 vim chaoge666.txt

2.1 ps常用命令组合(重点)

参数风格,请注意,参数的位置,存在先后关系,位置错误可能导致无法使用。

# UNIX风格,没有短横线
a # 显示所有终端、所有用户执行的进程
u # 以用户显示出进程详细信息
x # 显示操作系统所有进程信息
f # 显示进程树形结构
o # 格式化显示进程信息,指定如pid
k # 对进程属性排序,如k %mem  ,正序排序   ,k -%mem 逆序
--sort,再进行排序,如 --sort %mem 根据内存使用率显示

linux标准参数用法
-e # 显示所有进程
-f # 显示进程详细
-p # 指定pid,显示其信息,如 ps -fp 2609
-C # 指定进程的名字查看,如ps -fC sshd
-U # 指定用户名,查看用户进程信息 ps -Uf yuchao01

2.2 pstree命令 作用、以树状图,显示父进程和子进程的关系

pstree 选项 [pid|user]

-p 显示pid
-u 显示用户切换
-H pid 高亮显示进程(没什么用)
-a 显示程序的完整命令,以及进程层级关系

用法
需安装
[root@yuchao-linux01 ~]# yum install psmisc  -y

查看指定pid,一号进程的所有父子进程(用户角度运行的进程)
[root@yuchao-linux01 ~]# pstree  1

查看指定用户,关于这个用户生成的父子进程关系
[root@yuchao-linux01 ~]# pstree jerry01

查看jerry01用户生成的所有进程,且显示进程pid
[root@yuchao-linux01 ~]# pstree -ap jerry01

显示进程树,以及对应进程的执行用户名
[root@yuchao-linux01 ~]# pstree -ua

2.3 pidof命令

pidof命令
指定进程名,显示出其pid
如显示出nginx进程号
[root@yuchao-linux01 ~]# pidof nginx
5491 5490 5489

2.4 lsof查看进程打开了什么文件

当我们需要检查网站服务器的nginx进程,以及nginx都打开了哪些文件,比如nginx记录的日志,写入到了什么文件里,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 # 列出文件大小

状态解释

[root@yuchao-linux01 log]# lsof +D /var/log/nginx/ | head -2
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
nginx   5489  root    2w   REG  253,0        0 17579733 /var/log/nginx/error.log

名称  
进程标识符id号        
进程执行的用户主    
文件描述符   
文件类型 reg普通文本 DIR目录
NODE 索引节点(文件在磁盘上的标识)
NAME 进程打开文件的名字

2.4.1 生产经验案例(lsof文件误删恢复)

# 1.确保nginx在运行中,以及有日志数据
[root@yuchao-linux01 log]# tail -f /var/log/nginx/access.log

# 2. lsof查看关于该日志文件的进程

[root@yuchao-linux01 ~]# lsof |grep /var/log/nginx/access.log
nginx     5489         root    5w      REG              253,0      1353   17579732 /var/log/nginx/access.log
nginx     5490        nginx    5w      REG              253,0      1353   17579732 /var/log/nginx/access.log
nginx     5491        nginx    5w      REG              253,0      1353   17579732 /var/log/nginx/access.log
tail      6112         root    3r      REG              253,0      1353   17579732 /var/log/nginx/access.log


# 3.模拟误删除该文件(但是进程没有退出,该文件描述符还未被释放,还是可以恢复的)
[root@yuchao-linux01 ~]# rm -f /var/log/nginx/access.log
[root@yuchao-linux01 ~]# ll /var/log/nginx/access.log
ls: cannot access /var/log/nginx/access.log: No such file or directory


# 4.再次查看文件描述符(文件名多了一个deleted被删除的标记)
[root@yuchao-linux01 ~]# lsof |grep /var/log/nginx/access.log
nginx     5489         root    5w      REG              253,0      1353   17579732 /var/log/nginx/access.log (deleted)
nginx     5490        nginx    5w      REG              253,0      1353   17579732 /var/log/nginx/access.log (deleted)
nginx     5491        nginx    5w      REG              253,0      1353   17579732 /var/log/nginx/access.log (deleted)
tail      6112         root    3r      REG              253,0      1353   17579732 /var/log/nginx/access.log (deleted)

# 5.此时进入linux中一个管理所有进程的目录,/proc,找到对应的进程id目录(父亲进程id),进入其管理文件描述符的地方。

[root@yuchao-linux01 fd]# pwd
/proc/5489/fd
[root@yuchao-linux01 fd]# ll
total 0
lrwx------ 1 root root 64 Mar 20 19:14 0 -> /dev/null
lrwx------ 1 root root 64 Mar 20 19:14 1 -> /dev/null
lrwx------ 1 root root 64 Mar 20 19:14 10 -> socket:[75619]
l-wx------ 1 root root 64 Mar 20 19:14 2 -> /var/log/nginx/error.log
lrwx------ 1 root root 64 Mar 20 19:14 3 -> socket:[75616]
l-wx------ 1 root root 64 Mar 20 19:14 4 -> /var/log/nginx/error.log
l-wx------ 1 root root 64 Mar 20 19:14 5 -> /var/log/nginx/access.log (deleted)
lrwx------ 1 root root 64 Mar 20 19:14 6 -> socket:[76223]
lrwx------ 1 root root 64 Mar 20 19:14 7 -> socket:[76224]
lrwx------ 1 root root 64 Mar 20 19:14 8 -> socket:[75617]
lrwx------ 1 root root 64 Mar 20 19:14 9 -> socket:[75618]

# 6.我们看到的这个5软连接文件,就对应了刚才的access.log日志文件
[root@yuchao-linux01 fd]# cat 5

# 7.恢复此文件描述符的数据,到日志文件即可完成文件恢复
[root@yuchao-linux01 fd]# cat 5 > /var/log/nginx/access.log

3、kill关闭进程

常用信号解释

3.0.1 杀死进程的命令

Kill (结束指定pid的进程)
killall (根据进程名杀死)
pkill (根据进程名杀死)
3.1 kill用法

kill -1 pid         # 进程重读配置文件
kill -15 pid         # 进程优雅退出
kill -9 pid         # 暴力干掉进程

4、killall、pkill关闭进程

  1. kill需要找到pid,然后再干掉进程
  1. pkill更省事了,直接根据进程名字干掉进程
  2. 注意pkill,kill可能会误杀,因为是根据进程名字匹配,如果进程包含了某名字,也会被杀掉,因此少用。

命令:killall

作用:通过程序的进程名来杀死一类进程

语法:# killall [信号] 进程名称

信号种类:和kill相同,这里不再重复

kill是终止单独一个进程
killall是根据进程名字,终止一类进程

补充:进程后台运行

程序运行可以有2种
前台运行
程序运行在当前的终端,所有的信息都输出到屏幕上,占用你的终端,你也无法继续使用
如果终端异常关闭,导致程序会自动退出
后台运行
不会占用你的终端,程序在系统后台跑着,你该干啥干啥,终端关了,程序也继续运行

后台运行命令

命令集合

command &    # 未启动的command放入后台去运行
jobs                # 查看后台进程列表
ctrl + z         # 暂停进程
bg                  # 程序放入后台运行,和 & 一样
fg                    # 将后台任务放入前台执行

后台命令实战(实战经验)

1.命令直接放入后台运行,注意日志写入到黑洞文件
[root@yuchao-linux01 ~]# ping yuchaoit.cn > /dev/null  &
[1] 1718
[root@yuchao-linux01 ~]#

2.查看后台任务列表
[root@yuchao-linux01 ~]# jobs
[1]+  Running                 ping yuchaoit.cn > /dev/null &
[root@yuchao-linux01 ~]#

3.可以将后台任务,放入前台执行,然后ctrl + z 再次暂停程序,放入后台
[root@yuchao-linux01 ~]# fg 1
ping yuchaoit.cn > /dev/null

^Z
[1]+  Stopped                 ping yuchaoit.cn > /dev/null
[root@yuchao-linux01 ~]#
[root@yuchao-linux01 ~]#
的确发现了一个停止的程序
[root@yuchao-linux01 ~]# jobs
[1]+  Stopped                 ping yuchaoit.cn > /dev/null
[root@yuchao-linux01 ~]#


4.可以再次让程序运行起来,并且依然是运行在后台
[root@yuchao-linux01 ~]# bg 1
[1]+ ping yuchaoit.cn > /dev/null &
[root@yuchao-linux01 ~]#
[root@yuchao-linux01 ~]#
[root@yuchao-linux01 ~]# jobs
[1]+  Running                 ping yuchaoit.cn > /dev/null &
[root@yuchao-linux01 ~]#

5、nohup命令 终端意外断开连接,后台执行的命令不会断开
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行

nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下

如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out 文件中。

一般和 & 后台符,结合使用。

记住一个标准用法
no

nohup不加&符号(不好用)


nohup添加&符号(好用)

nohup 生产环境下的用法(重要)

[root@yuchao-tx-server ~]# nohup ping baidu.com > /tmp/nohup_ping.log 2>&1 &
[1] 31021
[root@yuchao-tx-server ~]# jobs
[1]+  运行中               nohup ping baidu.com > /tmp/nohup_ping.log 2>&1 &
[root@yuchao-tx-server ~]#
[root@yuchao-tx-server ~]# tail -f /tmp/nohup_ping.log
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=50 time=5.50 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=50 time=5.52 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=3 ttl=50 time=5.45 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=4 ttl=50 time=5.50 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=5 ttl=50 time=5.50 ms

关闭窗口,程序也不会中断,只有通过ps命令可以看到该进程,还在运行了。

6、理解linux的数据流
执行linux命令时,linux默认为用户进程提供了3种数据流

stdin
标准输入、0
一般是键盘输入数据
比如cat命令等待用户输入
stdout
标准输出、1
程序执行结果,输出到终端
stderr 2
标准错误输出
程序执行结果,输出到终端
6.1 标准输入

cat 接收键盘的输入数据,然后打印到终端,直到ctrl +d 结束输入
[root@yuchao-tx-server ~]# cat
hello
hello
我爱你
我爱你

6.2 标准输出

[root@yuchao-linux01 ~]# ls /opt/
HelloWorld.class  HelloWorld.java  jdk  jdk1.8.0_221  jdk-8u221-linux-x64.tar.gz  passwd

6.3 标准错误输出

[root@yuchao-linux01 ~]# ls /opppp > stderr.txt
ls: cannot access /opppp: No such file or directory

6.4 数据重定向
我们发现,数据流的输入、输出,都是直接显示在屏幕上,然后你貌似做不了更多处理,不够强大。
因此linux系统提供了数据重定向符号,让你能够对数据再次做处理。

6.4.1 输入重定向
输入重定向是指把命令(或可执行程序)的标准输入,重定向到指定的文件中。
也就是说,输入可以不来自键盘,而来自一个指定的文件。

比如依然是是cat命令,原本应该是,等待键盘输入数据
现在是通过输入重定向符号,将标准输入stdin,改为了文件数据作为输入。

[root@yuchao-linux01 ~]# cat < t1.log
于超老师带你学Linux
666
666

6.4.2 输出重定向(重要)
输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。

这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。

使用 “ > ”符号,将标准输出重定向到文件中。形式为:命令>文件名

使用“ >> ”符号,将标准输出结果追加到指定文件后面。形式为:命令>>文件名

使用“ 2> ”符号,将标准错误输出重定向到文件中。形式为:命令 2> 文件名

使用“ 2>> ”符号,将标准错误输出追加到指定文件后面。形式为:命令 2>>文件名

使用“ 2>&1 ”符号或“ &> ”符号,将把标准错误输出stderr重定向到标准输出stdout

使用“ >/dev/null ”符号,将命令执行结果重定向到空设备中,也就是不显示任何信息。

重定向基本用法
[root@yuchao-tx-server ~]# echo '超哥带你学linux' > test.log
[root@yuchao-tx-server ~]#
[root@yuchao-tx-server ~]# echo '超哥带你学linux' >> test.log


错误重定向追加
[root@yuchao-tx-server ~]# echhhho '超哥带你学linux' 2>> test.log
[root@yuchao-tx-server ~]#
[root@yuchao-tx-server ~]# cat test.log
超哥带你学linux
超哥带你学linux
-bash: echhhho: 未找到命令

将stderr重定向到stdout,就可以防止程序运行出错,导致程序异常
写法1
[root@yuchao-tx-server ~]# echhhho '超哥带你学linux' &>> test.log
写法2
[root@yuchao-tx-server ~]# echhhho '超哥带你学linux' >> test.log 2>&1


黑洞文件,空设备文件,也同样遵循,stdout、stderr的语法
[root@yuchao-tx-server ~]# echo '超哥带你学linux' &>>  /dev/null
[root@yuchao-tx-server ~]# echhhhho '超哥带你学linux' &>>  /dev/null

2>&1 解释

图解stdout/stderr
标准输出stdout就是一个命令会有正确的执行结果,在屏幕上显示出,让用户看见。


三、机器负载查看

3.1 系统平均负载查看uptime
系统负载指的是在单位时间内,系统分配给CPU处理的进程数量,必然是数量越多,负载值越高,机器的压力越大。

uptime命令
[root@yuchao-linux01 ~]# uptime
 17:45:12 up  2:13,  2 users,  load average: 0.00, 0.01, 0.05

这个load average表示平均负载,多少数值比较合适?

1.最理想化的状态是每个CPU都在运行着进程,充分让cpu工作起来,效率最大化,你得先看看你机器上有几个CPU(几个核,就是有几个cpu可以工作)。
# 发现是4核的
[root@yuchao-linux01 ~]# lscpu |grep -i '^cpu(s)'
CPU(s):                4

# 以及用top命令,按下数字1,查看几核。
top


2. 如何理解uptime看到的负载
分别是1、5、15分钟内的平均负载情况,表示是1~15分钟内CPU的负载变化情况。
1. 三个值如果差不多,表示系统很稳定的运行中,15分钟以内,CPU都没有很忙
2. 如果1分钟内的值,远大于15分钟的值,表示机器在1分钟内压力在直线上升
3. 如果1分钟内的值,小于15分钟的值,表示系统的负载正在下降中

3.2 CPU压力测试(硬核讲解)

3.2.1 sysstat工具包
sysstat是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如:CPU 使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有利于我们判断系统是否正常运行,是提高系统运行效率、安全运行服务器的得力助手。

包含的工具
iostat

输出CPU的统计信息和所有I/O设备的输入输出(I/O)统计信息

mpstat

mpstat是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。mpstat最大的特点是:可以查看多核心cpu中每个计算核心的统计数据;而类似工具vmstat只能查看系统整体cpu情况。


pidstat

关于运行中的进程/任务、CPU、内存等的统计信息

sar

保存并输出不同系统资源(CPU、内存、IO、网络、内核等)的详细信息

sadc

系统活动数据收集器,用于收集sar工具的后端数据

sa1

系统收集并存储sadc数据文件的二进制数据,与sadc工具配合使用

sa2

配合sar工具使用,产生每日的摘要报告

sadf

用于以不同的数据格式(CVS或者XML)来格式化sar工具的输出

sysstat

sysstat 工具包的 man 帮助页面。

nfsiostat

NFS(Network File System)的I/O统计信息

cifsiostat

CIFS(Common Internet File System)的统计信息

官方网站: http://sebastien.godard.pagesperso-orange.fr

1.安装该工具包
[root@yuchao-linux01 ~]# yum install sysstat stress -y


2.对cpu压测,stress命令
# -c, --cpu N 产生 N 个进程,每个进程都反复不停的计算随机数的平方根
#  -t, --timeout N 在 N 秒后结束程序

# 跑满2个cpu核,
[root@yuchao-linux01 ~]# stress --cpu 2 --timeout 600
stress: info: [3782] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd

3. 再开一个终端,查看机器的负载情况
一分钟内的CPU压力飙升
[root@yuchao-linux01 ~]# uptime
 19:01:26 up  3:29,  2 users,  load average: 1.35, 0.45, 0.19

4. 用watch命令,高亮检测哪些数值在变化
[root@yuchao-linux01 ~]# watch -d  uptime


5.可以用mpstat命令查看cpu状态细节
-P {|ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值

#查看多核CPU核心的当前运行状况信息, 每5秒更新一次
[root@yuchao-linux01 ~]# mpstat -P ALL 5

可以清晰的看到,哪一个cpu核,压力最大,通过%usr看到用户进程,消耗了100%的cpu。


6.也可以用top命令检测cpu压力,发现是有2个stress进程,占据了100%的cpu
top - 19:07:46 up  3:36,  2 users,  load average: 1.33, 1.38, 0.74
Tasks: 131 total,   4 running, 127 sleeping,   0 stopped,   0 zombie
%Cpu0  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  7992344 total,  7450560 free,   139564 used,   402220 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  7573368 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  3955 root      20   0    7312    100      0 R 100.0  0.0   0:10.55 stress
  3954 root      20   0    7312    100      0 R  99.6  0.0   0:10.54 stress
     1 root      20   0  125460   3896   2584 S   0.0  0.0   0:02.25 systemd

free查看内存使用情况
命令:free

作用:查看内存使用情况

语法:#free -m

选项:

-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和内存数据交换,存放内存已经读取完毕的数据。

8buff和cache
buffer,缓冲区,buffers是给写入数据加速的
Cache,缓存,Cached是给读取数据时加速的

总结cache、buffer
这俩都是计算机的重要属性,不仅在内存,磁盘里有使用,后面的网站架构篇,也多处使用到缓存的概念。
cache解决的时间问题,提高数据读取速度
cache利用的是内存极快的速度特性,读写速度是磁盘的很多倍。
buffer解决的是空间问题,给数据写入提供一个暂存空间
磁盘对碎片化的数据处理,是很低效的,我们后面学习磁盘管理,即可更深入理解
buffer利用的是内存的存储特性。

四、磁盘管理

df 查看磁盘信息
命令:df
作用:查看磁盘的空间(disk free)
语法:# df [-h]
选项:-h表示可读性较高的形式展示大小

4.1 磁盘io监控(iotop)
iotop命令 是一个用来监视磁盘I/O使用状况的top类工具。
iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息

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

5.3 netstat查看进程网络访问

命令:netstat

作用:查看网络连接状态

语法:netstat -tnlp

选项:

-t:表示只列出tcp 协议的连接;

-n:表示将地址从字母组合转化成ip 地址,将协议转化成端口号来显示;

-l :表示过滤出"state(状态)"列中其值为LISTEN(监听)的连接;

-p:表示显示发起连接的进程pid 和进程名称;


用法

1.linux允许一个服务,基本会打开一个端口,如sshd打开22端口,其他服务也一样用法,结合grep即可如果找不到对应信息,则得考虑是名字敲错了,还是服务未运行

[root@yuchao-linux01 ~]# netstat -tnlp |grep 22
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1810/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1156/sshd           
tcp6       0      0 :::22                   :::*                    LISTEN      1156/sshd

5.4 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 显示版本信息
# 常用组合
# 显示tcp、udp、ip地址、监听中的连接、进程信息
[root@yuchao-linux01 ~]# ss -tunlp

5.5 网络流量监控命令iftop
作用和top和iotop一样,动态显示机器上,网卡的流量动态

[root@yuchao-linux01 ~]# yum install iftop -y

标签:linux01,log,0.0,yuchao,进程,root,资源管理
From: https://www.cnblogs.com/btcm409181423/p/17963911

相关文章

  • 基于SSM公司人力资源管理系统设计实现
    随着信息互联网购物的飞速发展,一般企业都去创建属于自己的管理系统。本文介绍了V公司人力资源管理系统的开发全过程。通过分析企业对于V公司人力资源管理系统的需求,创建了一个计算机管理V公司人力资源管理系统的方案。文章介绍了V公司人力资源管理系统的系统分析部分,包括可行性分析......
  • linux和window下用资源管理器打开文件所在文件夹并选中文件
    1.应用场景软件中需要定位到软件打开的文件,例如视频或者图片。用户可以方便的去通过软件去找到系统的文件; 2.解决方法window系统如果文件夹已经被打开,而且是最大化状态,文件夹中文件特别多时无法选中文件,window系统会记住用户最大化文件夹的状态,导致无法定位到文件夹,这好像是......
  • 华为云耀云服务器L实例-微人事前后端分离人力资源管理系统-RabbitMQ配置
     华为云耀云服务器L实例-微人事前后端分离人力资源管理系统-RabbitMQ配置   产品官网:https://www.huaweicloud.com/product/hecs-light.html 项目源代码地址:https://github.com/lenve/vhr  今天我们采用可靠更安全、智能不卡顿、价优随心用、上手更简单、管理......
  • 华为云耀云服务器L实例-微人事前后端分离人力资源管理系统-项目本地配置
     华为云耀云服务器L实例-微人事前后端分离人力资源管理系统-项目本地配置   产品官网:https://www.huaweicloud.com/product/hecs-light.html 项目源代码地址:https://github.com/lenve/vhr  今天我们采用可靠更安全、智能不卡顿、价优随心用、上手更简单、管理......
  • 华为云耀云服务器L实例-微人事前后端分离人力资源管理系统-mysql配置vhr数据库准备
     华为云耀云服务器L实例-微人事前后端分离人力资源管理系统-mysql配置vhr数据库准备  产品官网:https://www.huaweicloud.com/product/hecs-light.html 项目源代码地址:https://github.com/lenve/vhr  今天我们采用可靠更安全、智能不卡顿、价优随心用、上手更简......
  • 华为云耀云服务器L实例-微人事前后端分离人力资源管理系统-Redis配置
     华为云耀云服务器L实例-微人事前后端分离人力资源管理系统-Redis配置   产品官网:https://www.huaweicloud.com/product/hecs-light.html 项目源代码地址:https://github.com/lenve/vhr  今天我们采用可靠更安全、智能不卡顿、价优随心用、上手更简单、管理特......
  • 数据科学在能源与环境领域的应用:可持续发展与资源管理
    1.背景介绍能源和环境是当今世界最重要的问题之一。随着人口增长和经济发展,能源需求和环境污染问题日益严重。数据科学在这些领域发挥了重要作用,为我们提供了有力的工具来解决这些问题。在这篇文章中,我们将探讨数据科学在能源和环境领域的应用,以及如何通过数据驱动的方法来实现可持......
  • Unity3D Asset与Object 资源管理系统详解
    Unity3D是一款流行的游戏开发引擎,它提供了一个强大的资源管理系统,可以帮助开发者有效地管理和使用游戏中的资源。在Unity3D中,资源可以分为Asset和Object两种类型,本文将详细介绍Unity3D的Asset与Object资源管理系统的技术细节和代码实现。对啦!这里有个游戏开发交流小组里面聚集了......
  • [资源管理] SQL Server 通过Resouce Governor来限制用户资源的使用
    创建资源池CREATERESOURCEPOOL[rp_test]WITH(min_cpu_percent=0,max_cpu_percent=1,min_memory_percent=0,max_memory_percent=1,AFFINITYSCHEDULER=AUTO)GO创建负载组CREATEWORKLOADGROUP[wlp_test]WITH(group_max_requests=10,importance=High,request_m......
  • 分布式资源管理和调度
    分布式资源管理和调度分布式资源管理和调度是指在分布式系统中有效地管理和调度系统中的资源,以满足各种任务的需求。在一个分布式系统中,资源可以包括计算资源(如CPU、内存)、存储资源(如磁盘空间)、网络带宽等。分布式资源管理的目标是实现高效的资源利用和公平的资源分配。它需要考......