第六周笔记

进程管理 计划任务管理

1 进程管理

进程和程序的却别:一个时动态的一个是静态的

进程的基本状态和转换:(以下七种状态)

捕获

一个时间片没有执行完等待下一个时间片再次执行。

进程的优先级

系统优先级:数字越小优先级越高

0-139:(在centos4,5中)   各有140个运行队列和过期队列 ,每个运行队列里又有优先级相同的进程在排队,如果在一个时间片里1队列里的进程未执行完 ,则备安排到过期队列里,下一个时间到来,先运行1运行队列里的程序,什么时候1运行队列里的进程执行完毕后,过期1队列里的程序又变成1运行队列了,依次顺序执行下去

0-98,99(CentOS6)

实时优先级:99-0 值最大优先级最高

进程内存

LRU:Least Recently Used 近期最少使用算法,释放内存

进程访问的时间顺序来排列,最近执行的进程排到第一位原本的第一位被挤到第二位了依次类推 内存里的物理块为8个。被挤到最后一个的进程在被挤将清除除内存块里。

查看进程进程ps   (常用的 ps  aux  )BSD类型的选项

• a  包括所有终端中的进程

• x  包括不链接终端的进程 (不在终端上显示的 系统内部运行的进程)

• u  显示进程所有者的信息

f 选项显示进程树,相当于 –forest

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

• o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem  (o和其他选项组和是必须要和他后面的参数紧挨着不然命令有错例如:ox pid,cmd,%cpu 则不行 auxo pid ,cmd ,%cpu 则可以)

UNIX类型的选项

-C cmdlist 查找命令的进程列表例如;ps -C bash (查找名字为bash 的进程列表还可以在C后面跟上脚本,来查看脚本的各种信息如:ps -C f1.sh -C f2.sh o pid,%mem,%cpu )

-L 显示线程 

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

-f: 显示完整格式程序信息 

-F: 显示更完整格式的进程信息 

-H: 以进程层级格式显示进程相关信息 

-u userlist 指定有效的用户ID或名称 

-U userlist 指定真正的用户ID或名称 

-g gid或groupname 指定有效的gid或组名称 

-G gid或groupname 指定真正的gid或组名称 

-p pid 显示指pid的进程 

–ppid pid 显示属于pid的子进程 

-M 显示SELinux信息,相当于Z

查找占用最多内存和CPU的进程:(centos6上不支持排序

ps axo pid,ppid,cmd,%mem,%cpu –sort=-%mem | head  (占内存最多-代表倒序)

ps axo pid,ppid,cmd,%mem,%cpu –sort=-%cpu | head (占cpu最多 —代表倒序由大到小)

其中 –sort / k 选项某某 可以单独使用例如 ps aux  –sort  -%mem

搜索进程

按预定义的模式:pgrep  (支持正则表达式来搜索某个进程pgrep -a “vim”)

pgrep [options] pattern

-u uid: effective user,生效者

-U uid: real user,真正发起运行命令者

-t terminal: 与指定终端相关的进程

-l: 显示进程名

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

-P pid: 显示指定进程的子进程

pidof + 进程名称 :可显示某个进程的进程id 例如:pidof vim

ps -fp 1234  :直显示某个进程的信息 如1234进程

系统工具

uptime:

显示当前时间,系统已启动的总时间、当前上线人数,系统平均负载(1、5、10分 钟的平均负载,一般不会超过1) 

系统平均负载: 指在特定时间间隔内运行队列中的平均进程数 

通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。

如果每 个CPU内核的任务数大于5,那么此主机的性能有严重问题 

如果linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被 充分使用

进程优先级

进程默认启动时的nice值为0,优先级为120

nice的优先级数值为-20-19之间

查看nice 的优先级

ps axo pid,comm,ni

调整nice 的优先级

renice -n   -20   进程pid号

进程管理工具  (动态查看)

top:有许多内置命令:

排序:

P:以占据的CPU百分比,%CPU  (从大到小来查看)

M:占据内存百分比,%MEM     (从大到小来查看)

T:累积占据CPU时长,TIME+

首部信息显示:

uptime信息:l命令

tasks及cpu信息:t命令

cpu分别显示:1 (数字)

memory信息:m命令

退出命令:q

修改刷新时间间隔:s

终止指定进程:k (默认杀掉占用cpu最大的进程 )

保存文件:W   (把当前的信息瞬间保存到家目录下 ,是个隐藏文件 .toprc)

top栏位信息简介

us:用户空间

sy:内核空间

ni:调整nice时间

id:空闲cpu

wa:等待IO时间

hi:硬中断

si:软中断(模式切换)

st:虚拟机偷走的时间

top工具的选项:

-d #: 指定刷新时间间隔,默认为3秒

-b: 全部显示所有进程

-n #: 刷新多少次后退出

htop命令:EPEL源 (需要安装

选项:

-d #: 指定延迟时间;

-u UserName: 仅显示指定用户的进程

-s COLUME: 以指定字段进行排序

子命令:(在htop界面里使用的)

s: 跟踪选定进程的系统调用

l: 显示选定进程打开的文件列表

a:将选定的进程绑定至某指定CPU核心

t: 显示进程树

查看内存空间:

free [OPTION]

-b 以字节为单位

-m 以MB为单位

-g 以GB为单位

-h 易读格式

-o 不显示-/+buffers/cache行

-t 显示RAM + swap的总和

-s n 刷新间隔为n秒 (free -s 2 查看内存使用情况每2s刷新查看一次)

-c n 刷新n次后即退出

vmstat命令:查看虚拟内存信息

vmstat 2 5  (2s执行一次,执行5次后退出)

iostat:统计CPU和设备IO信息

iostat 1 10  (1s查看一次执行10次后退出)

pmap命令:进程对应的内存映射

pmap -x 234  : 显示进程234详细的信息对应的内存映射。

系统监控工具

glances命令:EPEL源

常用选项:

-b: 以Byte为单位显示网卡数据速率

-d: 关闭磁盘I/O模块

-f /path/to/somefile: 设定输入文件位置

-o {HTML|CSV}:输出格式

-m: 禁用mount模块

-n: 禁用网络模块

-t #: 延迟时间间隔

-1:每个CPU的相关数据单独显示

实现远程监控:

在一台作为服务器的机器上开启glances

服务器模式: glances -s -B IPADDR   (IPADDR: 指明监听的本机哪个地址的IP号)

在另一台客户机开启监视模式

客户端模式: glances -c IPADDR      (IPADDR:要连入的服务器端开启监视的地址IP)

系统监控工具

dstat命令:系统资源统计,代替vmstat,iostat  (动态更新默认1s一次)

-c: 显示cpu相关信息

-d: 显示disk相关信息

-g:显示page相关统计数据

-m: 显示memory相关统计数据

-n: 显示network相关统计数据

-p: 显示process相关统计数据

-r: 显示io请求相关的统计数据

-s: 显示swapped相关的统计数据

dstat –top-cpu:

–top-cpu:显示最占用CPU的进程

–top-io: 显示最占用io的进程 

–top-mem: 显示最占用内存的进程 

–top-latency: 显示延迟最大的进程

进程管理工具 kill 命令  kill -1 4556   (可以按选项编号来代替选项命令 进程只能是进程ID号可加多个进程ID)

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

2) SIGINT: 中止正在运行的进程;相当于Ctrl+c

3) SIGQUIT:相当于ctrl+\  (退出)

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

15) SIGTERM:终止正在运行的进程  (正常退出此进程)

18) SIGCONT:继续运行

19) SIGSTOP:后台休眠

按名称来杀进程:killall  sleep   (把同样名字的进程都给杀掉)

按模式来杀掉进程:pkill   (正则表达式模糊搜索)

-u uid: effective user,生效者

-U uid: real user,真正发起运行命令者

-t terminal: 与指定终端相关的进程

-l: 显示进程名(pgrep可用)

-a: 显示完整格式的进程名(pgrep可用)

-P pid: 显示指定进程的子进程

作业管理

让作业运行于后台

(1) 运行中的作业: Ctrl+z  (进程是放到后台了但进程停止了)

(2) 尚未启动的作业:  命令后面跟 &

后台执行的进程,无法用ctrl+c关掉 可以使用jobs查看后台执行的列表的作业编号

用命令fg +作业编号 将它变为前台终端执行,然后关掉。

或者用kill %+作业编号

fg  +作业编号  :将后台的进程变为前台来执行

bg +作业编号   :将后太台停止的进程开始在后台继续运行

进程运行的三种模式及相互切换

捕获

前台(未运行的程序)—–>后台运行:命令后+&

前台(已运行的程序)—–>后台休眠:ctrl +z

后台休眠和后台运行——->前台 :fg jobs的 进程编号

后台休眠——–>后台运行 :bj jobs的 进程编号

后台运行——->后台休眠: kill -19  进程

后台休眠和后台运行——–>结束: kill % jobs的进程编号

后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望 送往后台后,剥离与终端的关系   nohup ping 172.20.0.1 &  (后台运行剥离终端在服务器上继续执行 ,即使终端断网或关机也也可以继续执行) 

或者用screen会话也能实现:screen ping 172.20.0.1 &

在另一台终端:screen -r 可查看执行

并行运行多个进程:(提高效率)

方法1 :

写入一个脚本中:

vim all.sh

进程1&

进程2&

进程3&

然后运行脚本all.sh

方法2:

(进程1&);(进程2&);(进程3&)

方法3 :

{   进程1&   进程2&    进程3&  }

任务计划

Linux任务计划、周期性任务执行

at   (未来的某时间点执行一次性的任务 )

at 18:30  (写入磁盘里的)  或者 at  now  +15minutes  (在未来的15分钟执行)

02pm + 3 days  (三天之后的下午2点执行)

ctrl +d 结束保存任务计划

at的计划任务存放在 /var/spool/at 目录下

-l:  查看计划任务列表

-d: 删除任务列表中的计划任务(加任务号)或者删除/var/spool/at下的文件也可以

-c: 查看具体作业任务

-f /path/from/somefile:从指定的文件中读取任务

创建任务时添加-m:当任务被完成之后,强制给用户发送一个空邮件,即使没有标准输出(at -m 18:00)

注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户 如果写脚本,将这些标准输出和错误重定向到/dev/null里以防止有大量的垃圾邮件占用磁盘空间

写入脚本里的计划任务可以用多行重定向来输入:
at 18:00  <<EOF

reboot

ls

EOF

/etc/at.{allow,deny}控制用户是否能执行at任务

用户白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能创建at计划任务

用户黑名单:/etc/at.deny 默认存在,拒绝该文件中用户 创建at计划任务,(默认黑名单里的用户为空)

如果连个文件都存在,则只时白名单里的用户才能执行,不在这两个名单里的用户也不可 创建计划任务

如果两个文件都不存在则只有root用户才能 创建计划任务

用户如在在两个文件里,也是可以创建计划任务的,白名单的优先级较高。

cron (周期性运行某任务)计划周期性执行的任务提交给crond,到指定时间会自动运行

查看crond 是否处于运行状态:

CentOS 7: systemctl status crond

CentOS 6: service crond status

如果没有启动需要手工的启动起来:

centos6: service start crond

centos7: systemctl start crond

下此开机自动启动

centos7 : systemctl enable crond

新建计划任务

vim /etc/crontab

捕获

格式为:分钟 ;小时;天;月;周(0-6)  以下案例:

10 21 *  *   *   echo “hello”   : 代表每天21:10执行此计划任务

0 */3 * * *    echo “hello”    : 代表每3个小时执行

*/20 *  *  *  *  echo “hello” :  代表每20分钟执行 (如果被60除不尽则不能这样用但可用sleep脚本代替例如:cmd0  sleep X   cmd0   sleepX   其中X代表任意时间 sleep 默认为秒)

sleep:      m: 分 h: 小时 d: 天   sleep    1m :为一分钟(1m必须连着写且不能颠倒)
*   *   10-20   *   *  : 代表每个月的10-20号执行

*   *   10,20   *    *    : 代表每个月的10和20号执行

*   *    10,20  *    3  :  他们俩是或的关系

如果有标准输出则需要重定向到/dev/null里防止发过多的垃圾邮件。

此文件只能是root用户去创建和修改此文件普通用户无法修改和创建,但可以通过下面的命令来实现 。

每个用户都有专用的cron任务文件: /var/spool/cron/

crontab -e :编辑任务

-l: 列出所有任务

-r: 移除所有任务

-i:同-r一同使用,以交互式模式移除指定任务

-u user: 仅root可运行,指定用户管理cron任务 (crontab -e -u lv 编辑其他用户的计划任务)

控制用户执行计划任务: /etc/cron.{allow,deny}

当机器因为修改计划任务开机就重启时 无法进入到界面

cetnos7上操作;

一种是进入救援模式:另一种不用进入救援模式也可以

重启后按 e 键 然后再

linux16 加 rd.break

再按ctrl +x 进入

首先用户没有权限,所以要先加权限

mount -o remount  rw /sysroot

再进去修改文件即可。

centos6 上的操作:关机重启

 

捕获的

进入此界面按任意键进入到下面模式

捕获都非常

再按a 键进入并再后面加 1  回车即可修改文件保存 再按 init 5 进入到图形界面即可。

练习
1、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间

  mkdir -p /backup 

  30  13  *  *  1-5  root   tar Jcvf  /backup/etcbak-date +F\%-H\%.tar.xz &>/dev/null

也可将上述命令写入脚本,执行脚本即可(%号可能转义不成功,则必须写入脚本里执行)

2、每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至 /tmp/meminfo.txt文件中

0  */2  *  *  *  grep -e “^S” -e “^M” /proc/meminfo >>/tmp/meminfo.txt

3、工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高 于80%,就执行wall警报

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97419

发表评论

登录后才能评论

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班