进程,系统性能和计划任务

1.什么是进程

process:运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位

进程ID(Process ID,PID)号码被用来标记各个进程

UID,GID,和SELinux语境决定对文件系统的存取和访问权限

通常从执行进程的用户来继承

存在生命周期

init:第一个进程,从Centos7以后为systemd

进程:都是由父进程创建,fork(),父子关系,cow:copy on write

进程,线程和协程

 进程更多的状态:

运行态:running

就绪态:ready

睡眠态:分为两种,可中断:interruptable,不可中断:uninterruptable

停止态:stopped,暂停于内存,但不会被调度,除非手动启动

僵死态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态的子进程

进程管理和性能相关工具

2.进程树pstree

pstree可以用来显示进程的父子关系,以树形结构显示

-p  显示PID

-u 显示用户切换

-H pid 高亮显示指定进程及其父辈进程

 3.进程信息ps

ps即process state,可以显示当前状态的快照,默认显示当前终端中的进程,Linux系统各进程的相关信息均保存在/proc/PID目录下的文件中

ps格式

ps [option] . . .

UNIX选项 如:-A -e

BSD选项 如:a

a  选项包括所有终端中的进程

x 选项包括不链接终端的进程

u 选项显示进程所有者的信息

f  选项显示进程树

k|--sort 属性    对属性排序,属性前加 - 表示倒序

o 属性. . . 选项显示定制的信息 pid,cmd,%cpu,%mem

-e 显示所有进程,相当于-A

ps axo 接想查询的
[20:38:47 root@centos7 ~]$ps axo pid,cmd,%cpu,%mem PID CMD %CPU %MEM 1 /usr/lib/systemd/systemd -- 0.0 0.8 2 [kthreadd] 0.0 0.0 4 [kworker/0:0H] 0.0 0.0 6 [ksoftirqd/0] 0.0 0.0 7 [migration/0] 0.0 0.0
ps aux显示
[20:41:46 root@centos7 ~]$ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.8 125472 3940 ? Ss 19:24 0:01 /usr/lib/systemd root 2 0.0 0.0 0 0 ? S 19:24 0:00 [kthreadd] root 4 0.0 0.0 0 0 ? S< 19:24 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S 19:24 0:00 [ksoftirqd/0] root 7 0.0 0.0 0 0 ? S 19:24 0:00 [migration/0] root 8 0.0 0.0 0 0 ? S 19:24 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? S 19:24 0:00 [rcu_sched]
按pid倒叙排序

[20:44:39 root@centos7 ~]$ps aux k -pid
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1673 0.0 0.4 155588 1952 pts/0 R+ 20:46 0:00 ps aux k -pid
root 1671 0.1 0.0 0 0 ? S 20:43 0:00 [kworker/0:1]
root 1656 0.0 0.0 0 0 ? S 20:38 0:00 [kworker/0:2]
root 1588 0.0 0.0 0 0 ? S 20:11 0:01 [kworker/0:0]

找到未知进程的执行程序文件路径

[20:51:46 root@centos7 ~]$ls -l /proc/740/exe
lrwxrwxrwx 1 root root 0 Jan  4 19:24 /proc/740/exe -> /usr/sbin/chronyd

4.查看进程信息prtstat

可以显示进程信息,来自于psmisc包

格式:

prstat [options]  PID . . .

-r  raw格式显示

[20:57:45 root@centos7 ~]$prtstat 740
Process: chronyd               State: S (sleeping)
  CPU#:  1          TTY: 0:0    Threads: 1
Process, Group and Session IDs
  Process ID: 740          Parent ID: 1
    Group ID: 738         Session ID: 738
  T Group ID: -1

Page Faults
  This Process    (minor major):      445         3
  Child Processes (minor major):        0         0
CPU Times
  This Process    (user system guest blkio):   0.01   0.08   0.00   0.00
  Child processes (user system guest):         0.00   0.00   0.00
Memory
  Vsize:       120 MB    
  RSS:         1757 kB             RSS Limit: 18446744073709 MB
  Code Start:  0x5638dbdef000         Code Stop:  0x5638dbe2c9fc
  Stack Start: 0x7fff25a95c50
  Stack Pointer (ESP): 0x7fff25a95800     Inst Pointer (EIP): 0x7fdf073c09a3
Scheduling
  Policy: normal
  Nice:   0          RT Priority: 0 (non RT)

5.pgrep

-u uid:生效者

-l:显示进程名

-a:显示完整格式的进程名

[21:09:12 root@centos7 ~]$pgrep -u postfix
1273
1730
[21:09:42 root@centos7 ~]$pgrep -lu postfix
1273 qmgr
1730 pickup
注意l和u的顺序

[21:12:33 root@centos7 ~]$pgrep -au yang
1766 -bash
1789 dd if=/dev/zero of=/dev/null

6.pidof

命令格式

pidof [options] [program[...]]

-x 按脚本名称查找pid

[09:59:29 root@centos7 ~]$pidof bash
1601

7负载查询uptime

/proc/uptime包括两个值,单位s

系统启动时长

空闲进程的总时长(按总的cpu核数计算)

uptime和w显示以下内容

当前时间

系统已启动的时间

当前上线人数

系统平均负载(1,5,15分钟的平均负载,一般不会超过1,超过5时建议警报)

[10:14:43 root@centos7 ~]$uptime 
 10:14:52 up 38 min,  2 users,  load average: 0.11, 0.06, 0.05
[10:14:52 root@centos7 ~]$w
 10:14:57 up 38 min,  2 users,  load average: 0.10, 0.06, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         09:56    1.00s  0.07s  0.00s w
root     pts/2    10.0.0.1         10:05    7:45   0.08s  0.08s -bash

8.显示cpu相关系统mpstat

来自于sysstat包

[10:17:53 root@centos7 ~]$mpstat 
Linux 3.10.0-1160.11.1.el7.x86_64 (centos7)     01/05/2021     _x86_64_       (2 CPU)

10:20:32 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:20:32 AM  all    0.24    0.00    0.50    0.41    0.00    0.01    0.00    0.00    0.00   98.84

9.查看进程实时状态top

 top提供动态的实时进程状态

有许多内置命令

帮助:h或? ,按q或esc退出帮助

排序

P:已占据的CPu百分比,%cpu

M:占据内存百分比,%MEM

T:累计占据cpu时长,time+

首部信息显示:

uptime信息:l命令

tasks及cpu信息:t命令

cpu分别显示:1(数字)

memory信息:m命令

修改刷新时间间隔:s

终止指定进程 :k

保存文件:w

10内存空间

清理缓存

[11:10:51 root@centos7 ~]$cat /proc/sys/vm/drop_caches 
0
[11:11:38 root@centos7 ~]$free -h
              total        used        free      shared  buff/cache   available
Mem:           980M        180M        673M        5.6M        127M        773M
Swap:          2.0G          0B        2.0G
[11:11:43 root@centos7 ~]$echo 3 > /proc/sys/vm/drop_caches 
[11:12:22 root@centos7 ~]$free -h
              total        used        free      shared  buff/cache   available
Mem:           980M        170M        764M        5.6M         45M        783M
Swap:          2.0G          0B        2.0G

一般情况下,应用在系统上稳定运行了,free值也会保持在一个稳定值的。不用清理缓存,否则,清空buffer,强制腾出free的大小,可能只是把问题给暂时屏蔽了。除非在软件开发阶段,需要临时清理buffer。

11.监视磁盘I/O iotop

来自于iotop包

iotop命令是一个 用来监视磁盘I/O使用状况的top类工具iotop 具有与top相似的UI,其中包括PID,用户,I/O,进程等相关信息,可查看每个进程是如何使用IO

12.显示网络带宽使用情况iftop

通过EPEL源的iftop包

[14:32:07 root@centos7 ~]$iftop -ni eth0

 13.查看进程打开文件lsof

lsof查看当前系统文件的工具。在linux环境下,一切皆文件,用户通过文件不仅可以访问常规数据,还可以访问网络连接和硬件如传输控制协议(tcp)和用户数据报协议(udp)套接字等,系统在后台在后台都为该应用程序分配了一个文件描述符

-a:列出打开文件存在的进程

-c《进程名》:列出指定进程所打开的文件

-g:列出GID号进程详情

-p:《进程号》:列出指定进程号所打开的文件

-u:列出UID号进程详情

-i《条件》:列出符合条件的进程(4。6。协议。端口。ip)

[14:47:47 root@centos7 ~]$lsof|head
COMMAND     PID  TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd       1         root  cwd       DIR              253,0       239         64 /
systemd       1         root  rtd       DIR              253,0       239         64 /
systemd       1         root  txt       REG              253,0   1632736     478680 /usr/lib/systemd/systemd
systemd       1         root  mem       REG              253,0     20064   34234110 /usr/lib64/libuuid.so.1.3.0
systemd       1         root  mem       REG              253,0    265576   33618
列出当前所有打开的文件
[15:11:18 root@centos7 ~]$lsof -p 12375
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
pickup 12375 postfix cwd DIR 253,0 201 67457751 /var/spool/postfix
pickup 12375 postfix rtd DIR 253,0 239 64 /
pickup 12375 postfix txt REG 253,0 285160 67457684 /usr/libexec/postfix/pickup
pickup 12375 postfix mem REG 253,0 61560 33597143 /usr/lib64/libnss_files-2.17.so

指定进程号,可以查看该进程打开的文件
[15:12:57 root@centos7 ~]$lsof /var/log/messages
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 1107 root 6w REG 253,0 3530818 100694078 /var/log/messages

查看当前那个进程正在使用此文件
[15:14:31 root@centos7 ~]$lsof -c bc
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bc 12534 root cwd DIR 253,0 251 100663361 /root
bc 12534 root rtd DIR 253,0 239 64 /
bc 12534 root txt REG 253,0 83424 774372 /usr/bin/bc
bc 12534 root mem REG 253,0 106176928 55352 /usr/lib/locale/locale-archive
bc 12534 root mem REG 253,0 19248 33597126 /usr/lib64/libdl-2.17.so
bc 12534 root mem REG 253,0 2156272 33594212 /usr/lib64/libc-2.17.so
bc 12534 root mem REG 253,0 174576 33618750 /usr/lib64/libtinfo.so.5.9

查看指定程序打开的文件

[15:17:27 root@centos7 ~]$lsof -i :9090
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 24u IPv6 55969 0t0 TCP *:websm (LISTEN)

查看端口连接状况

[15:20:17 root@centos7 ~]$lsof -i@127.0.0.1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
chronyd 734 chrony 5u IPv4 18020 0t0 UDP localhost:323 
master 1201 root 13u IPv4 20430 0t0 TCP localhost:smtp (LISTEN)

查看连接ip,端口等一些服务的连接情况

14.cockpit

cockpit是一个基于web界面的应用,它提供了对系统的图形化管理

安装cockpit

[19:00:51 root@centos7 ~]$yum -y install cockpit
[19:00:51 root@centos7 ~]$systemctl enable --now cockpit.socket
打开浏览器,访问一下地址:
https://主机ip:9090

15信号发送kill

显示当前系统可用信号

kill -l

 1) SIGHUP 无需关闭进程而让其重读配置文件

2) SIGINT   终止正在运行的进程,相当于ctrl+c

3) SIGQUIT  相当于ctrl+

9) SIGKILL  强制杀死正在运行的进程

15) SIGTERM  终止正在运行的进程,默认信号

18) SIGCONT  继续运行

19) SIGSTOP  后台休眠

指定信号的方法

信号的数字标识:1,2,9

范例

[19:11:10 root@centos7 ~]$kill -9 `pidof ping`

15.作业管理

前台作业:通过终端启动,且启动后一直占据终端

后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)

 让作业运行与后台

运行中的作业:crtl+z 进入后台休眠

尚未启动的作业:command &后台运行

后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系

nohup command &>/dev/null &

[19:11:22 root@centos7 ~]$nohup ping www.baidu.com &>/dev/null &
后台运行,关闭终端一
[19:19:47 root@centos7 ~]$ps aux |grep ping
root       1528  0.0  0.1 150092  1980 ?        S    19:19   0:00 ping www.baidu.com
在终端二里仍看到在运行

查看当前终端所有作业

jobs

fg 加作业编号:把指定的后台作业调回前台

bg 作业编号:让送往后台的作业在后台继续运行

kill 作业编号:终止指定的作业

并行运行

利用后台执行,实现并行功能,即同时运行多个进程,提高效率

方法一

cat all.sh
f1.sh&
f2.sh&
f3.sh&

方法二

(f1.sh&);(f2.sh&);(f3.sh&)

方法三

f1.sh&f2.sh&f3.sh&

范例

多组命令实现并行

[19:26:54 root@centos7 ~]$cat ping.sh 
#!/bin/bash
net=10.0.0.
for i in {1..254};do
    { ping -c1 -w1 $net$i >/dev/null && echo $net$i is up || echo $net$i is down;}&
    done

函数实现

#!/bin/bash
myping(){
    ping -c2 -i0.3 -W1 $1 &>/dev/null
    if [ $? -eq 0 ];then
       echo "$1 is up"
    else
       echo "$1 is down"
    fi
}
for i in {1..254}
do
     myping 192.168.0.$i &
done

16.任务计划

通过任务计划,可以让系统自动的按时间或周期性任务执行任务

周期性计划任务cron

cron依赖于crond服务,确保crond守护处于运行状态

systemctl status crond
centos7以后版本
service crond status
centos6

cron任务分为

系统cron任务:系统维护作业,/etc/crontab主配置文件,/etc/cron.d/子配置文件

用户cron任务:保存在/var/spool/cron/username,利用crontab命令管理

系统cron计划任务

/etc/crontab 格式说明

[19:44:47 root@centos7 ~]$cat /etc/crontab 
SHELL=/bin/bash                          #默认的shell类型
PATH=/sbin:/bin:/user/sbin:/usr/bin #默认的PATH变量值,可以修改
MAILTO=root  #默认标准输出和错误发给邮件root,可以指向其他用户

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

crontab命令格式:

crontab [-u user] [-e |-l|-r] [-i]

-l 列出所有任务

-e 编辑任务

-r 移除所有任务

-u user 指定用户管理cron任务,仅root可运行

[20:30:26 root@centos7 ~]$crontab -e

*/10 * * * 1-5  /root/nihao.sh
周一到周五每10分钟执行一次脚本,注意要给脚本执行权限
11月每天的6-12点之间每隔2小时执行/app/bin/test.sh
[20:30:26 root@centos7 ~]$crontab -e * 6-12/2 * * * /app/bin/test.sh

 

原文地址:https://www.cnblogs.com/aiyoubucuo/p/14232453.html