Linux进程管理和怎样布置定时任务


进程状态

Linux内核:抢占式多任务
进程类型:

  • 守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
  • 前台进程:跟终端相关,通过终端启动的进程
    注意:两者可相互转化

进程状态:

  1. 运行态:running
  2. 就绪态:ready
  3. 睡眠态: 可中断:interruptable 不可中断:uninterruptable
  4. 停止态:stopped,暂停于内存,但不会被调度,除非手动启动
  5. 僵死态:zombie,结束进程,父进程结束前,子进程不关闭

进程的系统管理工具

进程的分类:

CPU-Bound:CPU密集型,非交互
IO-Bound:IO密集型,交互

Linux系统状态的查看及管理工具

pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup

pstree命令:

pstree-display a tree of processes(以数的形式表示进程)

ps: process state

ps-report a snapshot of the current processes
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中

ps -aux查看现在的进程
[root@centos ~]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.4  0.3 193760  6812 ?        Ss   02:52   0:02 /usr/lib/systemd/syst
root          2  0.0  0.0      0     0 ?        S    02:52   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   02:52   0:00 [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    02:52   0:00 [ksoftirqd/0]
root          7  0.0  0.0      0     0 ?        S    02:52   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    02:52   0:00 [rcu_bh]
root          9  0.1  0.0      0     0 ?        S    02:52   0:00 [rcu_sched]
root         10  0.0  0.0      0     0 ?        S<   02:52   0:00 [lru-add-drain]
root         11  0.0  0.0      0     0 ?        S    02:52   0:00 [watchdog/0]
root         12  0.0  0.0      0     0 ?        S    02:52   0:00 [watchdog/1]
字段含义
USER进程发起者
PID进程号
%CPU对CPU的占比
%MEM对内存的占比
VSZVirtual memory SiZe,虚拟内存集,线性内存
RSSReSidentSize, 常驻内存集
TTY终端
STAT进程状态
START TIME进程开始的时间
COMMAND该进程执行的命令
STAT进程状态字段含义
Rrunning
Sinterruptablesleeping
Duninterruptable sleeping
Tstopped
Zzombie
+前台进程
l多线程进程
L内存分页并带锁
N低优先级进程
<高优先级进程
ssession leader,会话(子进程)发起者
VSZ虚拟内存和RSS常驻内存解释

RSS 是常驻内存集(Resident Set Size),表示该进程分配的内存大小。
RSS 不包括进入交换分区的内存。
RSS 包括共享库占用的内存(只要共享库在内存中)
RSS 包括所有分配的栈内存和堆内存。
VSZ 表示进程分配的虚拟内存。
VSZ 包括进程可以访问的所有内存,包括进入交换分区的内容,以及共享库占用的内存。

简单来说,RSS常驻内存没有VSZ那么大的原因是因为进程可能并没有用到那么多的功能,而在虚拟内存中功能比进程用到的功能多,所以常驻内存就好比是只取了部分的功能也就相当于只取了部分的内存,所以常驻内存小于虚拟内存

通过一个例子来理解一下:
如果一个进程,程序的大小有 500K,链接的共享库大小有 2500K,堆栈内存共有 200K,其中 100K 进入了交换分区。进程实际加载了共享库中的 1000K 的内容,以及自己程序的中的 400K 的内容。请问 RSS 和 VSZ 应是多少?
RSS: 400K + 1000K = 1400K
VSZ: 500K + 2500K + 200K = 3200K
RSS 中有一部分来自共享库,而共享库可能被许多进程使用,所以如果把所有进程的 RSS 加起来,可能比系统内存还要大。

ps命令

常用组合:-aux / -ef / -eFH

选项含义
-e显示所有进程
-f显示完整格式程序信息
-F显示更完整格式的进程信息
-H以进程层级格式显示进程相关信息
uptime

显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不会超过1)
系统平均负载:指在特定时间间隔内运行队列中的平均进程数

  • 通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题
    举例说明:
    如果linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使用
[root@centos ~]# uptime
 04:57:00 up  2:04,  2 users,  load average: 0.00, 0.01, 0.05
top

排序:

按键含义
P以占据的CPU百分比,%CPU
M占据内存百分比,%MEM
T累积占据CPU时长,TIME+

首部信息显示:

  • uptime信息:l命令
  • tasks及cpu信息:t命令
  • cpu分别显示:1 (数字)
  • memory信息:m命令
  • 退出命令:q
  • 修改刷新时间间隔:s
  • 终止指定进程:k
  • 保存文件:W
[root@centos ~]# top
top - 05:00:12 up  2:08,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 126 total,   1 running, 125 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1863088 total,  1431720 free,   170148 used,   261220 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  1478616 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND            
     1 root      20   0  193760   6816   4152 S   0.0  0.4   0:02.37 systemd            
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.03 kthreadd           
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H       
     6 root      20   0       0      0      0 S   0.0  0.0   0:00.11 ksoftirqd/0        
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.05 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:01.59 rcu_sched          
    10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain      
    11 root      rt   0       0      0      0 S   0.0  0.0   0:00.03 watchdog/0         
    12 root      rt   0       0      0      0 S   0.0  0.0   0:00.03 watchdog/1         
    13 root      rt   0       0      0      0 S   0.0  0.0   0:00.04 migration/1        
    14 root      20   0       0      0      0 S   0.0  0.0   0:00.07 ksoftirqd/1        
    16 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H       
    18 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kdevtmpfs          
    19 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 netns              
    20 root      20   0       0      0      0 S   0.0  0.0   0:00.00 khungtaskd         
    21 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 writeback          
    22 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kintegrityd        
    23 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset             
    24 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset             
    25 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset             
    26 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kblockd            
    27 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 md                 
    28 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 edac-poller        
    29 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 watchdogd          
    30 root      20   0       0      0      0 S   0.0  0.0   0:01.74 kworker/1:1        
    36 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kswapd0            

栏位信息简介

字段含义
us用户空间
sy内核空间
ni调整nice时间
id空闲
wa等待IO时间
hi硬中断
si软中断(模式切换)
st虚拟机偷走的时间
iostat:统计CPU和IO设备信息
[root@centos ~]# iostat
Linux 3.10.0-1062.12.1.el7.x86_64 (centos) 	04/13/2020 	_x86_64_	(2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.07    0.00    0.22    0.01    0.00   99.71

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
scd0              0.00         0.00         0.00         44          0
sda               1.45        20.05         1.88     193010      18091
dm-0              0.98        17.24         1.66     166003      16031
dm-1              0.01         0.11         0.00       1068          0
vmstat查看虚拟内存信息
[root@centos ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1430704   1004 261504    0    0    10     1   25   34  0  0 100  0  0

字段信息:

procs字段含义
r可运行(正运行或等待运行)进程的个数,和核心数有关
b处于不可中断睡眠态的进程个数(被阻塞的队列的长度)
memory字段含义
swpd交换内存的使用总量
free空闲物理内存总量
buff用于buff的内存总量
cache用于cache的内存总量
swap字段含义
si从磁盘交换进内存的数据速率(kb/s)
so从内存交换至磁盘的数据速率(kb/s)
io字段含义
bi从块设备读入数据到系统的速率(kb/s)
bo保存数据至块设备的速率
system字段含义
ininterrupts 中断速率,包括时钟
cscontext switch 进程切换速率
cpu字段含义
usTimespent running non-kernel code
syTime spent running kernel code
idTime spent idle.
waTime spent waiting for IO.
stTime stolen from a virtual machine.

-s: 显示内存的统计数据

[root@centos ~]# vmstat -s
      1863088 K total memory
       169812 K used memory
       114068 K active memory
       119600 K inactive memory
      1430728 K free memory
         1004 K buffer memory
       261544 K swap cache
      4063228 K total swap
            0 K used swap
      4063228 K free swap
         1303 non-nice user cpu ticks
           16 nice user cpu ticks
         4204 system cpu ticks
      2066758 idle cpu ticks
          139 IO-wait cpu ticks
            0 IRQ cpu ticks
          107 softirq cpu ticks
            0 stolen cpu ticks
       193086 pages paged in
        18219 pages paged out
            0 pages swapped in
            0 pages swapped out
       508645 interrupts
       691743 CPU context switches
   1586760729 boot time
         3582 forks
pmap命令

格式:pmap[options] pid [...]
-x: 显示详细格式的信息
示例:pmap (-x)进程号

dstat工具

dstat命令:系统资源统计,代替vmstat,iostat

选项含义
-c显示cpu相关信息
-C#,#,…,total
-d显示disk相关信息
-Dtotal,sda,sdb,…
-g显示page相关统计数据
-m显示memory相关统计数据
-n显示network相关统计数据
-p显示process相关统计数据
-r显示io请求相关的统计数据
-s显示swapped相关的统计数据
–top-cpu显示最占用CPU的进程
–top-io显示最占用io的进程
–top-mem显示最占用内存的进程
–top-latency显示延迟最大的进程
[root@centos ~]# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  0   0 100   0   0   0|  32k 2258B|   0     0 |   0     0 |  50    67 
  0   0 100   0   0   0|   0     0 | 180B  842B|   0     0 |  47    54 
  0   0 100   0   0   0|   0     0 | 337B  362B|   0     0 |  34    45 
  0   1 100   0   0   0|   0     0 | 180B  362B|   0     0 |  53    62 
  1   0 100   0   0   0|   0     0 | 120B  362B|   0     0 |  58    67 
  0   0 100   0   0   0|   0     0 | 226B  422B|   0     0 |  40    48 
  0   1 100   0   0   0|   0     0 | 120B  362B|   0     0 |  28    39 
  0   0 100   0   0   0|   0     0 | 120B  362B|   0     0 |  38    51 
  0   0 100   0   0   0|   0     0 | 120B  362B|   0     0 |  29    43 
  0   0 100   0   0   0|   0     0 | 120B  362B|   0     0 |  37    48 
  0   0 100   0   0   0|   0     0 | 120B  362B|   0     0 |  27    35 
kill命令:杀死进程

按PID:kill [-SIGNAL] pid…

kill –n SIGNAL pid
kill –s SIGNAL pid

按名称:killall [-SIGNAL] comm…
按模式:pkill [options] pattern

作业管理

Linux的作业控制

  • 前台作业:通过终端启动,且启动后一直占据终端;
  • 后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)

让作业运行于后台

  • 运行中的作业:Ctrl+z
  • 尚未启动的作业:COMMAND &
    后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系

nohup COMMAND &>/dev/null &
screen;COMMAND
查看当前终端所有作业:jobs
作业控制:

  • fg[[%]JOB_NUM]:把指定的后台作业调回前台
  • bg[[%]JOB_NUM]:让送往后台的作业在后台继续运行
  • kill [%JOB_NUM]:终止指定的作业

示例:
这里的示例以dstat命令来展示
1.组合键Ctrl+z可以将运行中的作业送往后台运行
2.使用命令fg +后台运行的作业号 可以将后台运行作业转为前台运行
3.使用命令bg +后台运行的作业号 可以将后台运行的作业在前台显示出来但是实际上还是在后台运行,在前台上输入其他命令完全不受影响
4.使用命令Ctrl+c 组合键可以杀死正在前台中运行的作业

[root@centos ~]# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  0   0 100   0   0   0|  17k 1340B|   0     0 |   0     0 |  42    59 
  0   0 100   0   0   0|   0     0 | 120B  902B|   0     0 |  55    89 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  54    87 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  50    85 ^Z
[1]+  Stopped                 dstat
[root@centos ~]# fg 1
dstat

  0   0 100   0   0   0|   0     0 |1116B 1200B|   0     0 | 391   596  missed 6 ticks
  0   1  99   0   0   0|   0     0 | 120B  394B|   0     0 |  57    89 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  48    81 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  53    83 ^Z
[1]+  Stopped                 dstat
[root@centos ~]# bg 1
[1]+ dstat &
[root@centos ~]# 
  0   0  99   0   0   0|   0     0 |1056B 1248B|   0     0 | 293   409  missed 3 ticks
  0   0 100   0   0   0|   0     0 | 217B  394B|   0     0 |  55    68 
  0   0 100   0   0   0|   0     0 | 120B  362B|   0     0 |  46    79 
  0   0 100   0   0   0|   0     0 | 120B  362B|   0     0 |  57    89 ls
1  nohup.out  vglv
[root@centos ~]# 
  0   1 100   0   0   0|   0     0 | 618B  988B|   0     0 | 102   131 ls
1  nohup.out  vglv
[root@centos ~]# 
  0   1 100   0   0   0|   0    20k| 558B  988B|   0     0 | 107   143 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  44    75 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  58    91 l
  0   0  99   0   0   0|   0     0 | 226B  468B|   0     0 |  54    83 s
1  nohup.out  vglv
[root@centos ~]# 
  0   1  99   0   0   0|   0     0 | 452B  882B|   0     0 | 124   142 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  45    77 
  0   0 100   0   0   0|   0     0 | 120B  422B|   0     0 |  73   101 
  0   0 100   0   0   0|   0  3072B| 120B  362B|   0     0 |  50    86 
  0   0 100   0   0   0|   0     0 | 120B  362B|   0     0 |  58    90 
  0   0 100   0   0   0|   0     0 | 120B  362B|   0     0 |  62    91 fg
  0   0 100   0   0   0|   0     0 | 452B  574B|   0     0 |  73   110  
  0   0 100   0   0   0|   0     0 | 226B  468B|   0     0 |  52    85 1
dstat

  0   0 100   0   0   0|   0     0 | 878B  590B|   0     0 |  87   118 
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  0   0 100   0   0   0|   0     0 |  60B  362B|   0     0 |  45    78 
  0   0 100   0   0   0|   0     0 | 120B  842B|   0     0 |  61    97 ^C
周期性运行某任务

相关的程序包:
cronie: 主程序包,提供crond守护进程及相关辅助工具
cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务
crontabs:包含CentOS提供系统维护任务
确保crond守护处于运行状态:
CentOS 7:
systemctl status crond
状态为active表示crond处于运行状态

[root@centos ~]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-04-13 02:52:22 EDT; 6h ago
 Main PID: 1239 (crond)
   CGroup: /system.slice/crond.service
           └─1239 /usr/sbin/crond -n

Apr 13 02:52:22 centos systemd[1]: Started Command Scheduler.
Apr 13 02:52:22 centos crond[1239]: (CRON) INFO (RANDOM_DELAY will be scaled with f...d.)
Apr 13 02:52:24 centos crond[1239]: (CRON) INFO (running with inotify support)
Hint: Some lines were ellipsized, use -l to show in full.

计划周期性执行的任务提交给crond,到指定时间会自动运行
系统cron任务:系统维护作业
相关配置文件:/etc/crontab
用户cron任务:crontab命令
日志存放位置:/var/log/cron

   # 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

例如:晚上9点10分运行echo命令
10 21 * * * centos /bin/echo "Hello World!"

时间表示法:

  • (1) 特定值
    给定时间点有效取值范围内的值
  • (2) *
    给定时间点上有效取值范围内的所有值
    表示“每个…”
  • (3) 离散取值
    #,#,#
  • (4) 连续取值
    #-#
  • (5) 在指定时间范围上,定义步长
    */#: #即为步长,每多少…

示例:每3小时echo和wall命令
0 */3 * * * centos /bin/echo “howdy”,/usr/bin/wall “welcome to JJS!”

crontab -e:为当前用户创建定时任务
示例:每分钟echo一个 “good!”
使用crontab -l命令查看当前用户的定时任务
cat /var/log/cron该命令是查看定时任务的日志

[root@centos ~]# crontab -e

       */1 * * * * echo "good!"

[root@centos ~]# crontab -l
*/1 * * * * echo "good!"

[root@centos ~]# cat /var/log/cron

Apr 13 09:24:01 centos CROND[5768]: (root) CMD (echo "good!")
Apr 13 09:25:01 centos CROND[5787]: (root) CMD (echo "good!")
Apr 13 09:25:56 centos crontab[5807]: (root) BEGIN EDIT (root)
Apr 13 09:26:02 centos CROND[5811]: (root) CMD (echo "good!")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值