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