1. 进程管理
1.1 进程
- 进程是正在执行的一个程序或命令,每个进程都是一个运行的实体,都有本身的地址空间而且会占用必定的系统资源
- 进程能够理解为正在执行的某个程序
1.2 进程管理简介
- 判断服务器的状态
- 查看系统中的全部进程
- 杀死进程,只有没法关闭才要杀死进程
1.3 进程的查看命令(ps)
ps aux
查看系统中全部进程,使用BSD操做系统格式
ps -le
查看系统中全部进程,使用Linux标准格式
- TTY是TeleType的一个缩写,原来指的是电传打字机,是经过串行线用打印机键盘经过阅读和发送信息的东西
- pts(pseudo['su:doʊ]-terminal slave)是所谓的伪终端或虚拟终端
1.3.1 选项
参数 |
含义 |
-a |
显示一个终端的全部进程 |
-u |
显示进程的归属用户及内存的使用状况 |
-x |
显示没有控制终端的进程 |
-l |
长格式显示,显示更详细的信息 |
1.3.2 结果字段含义
数据 |
含义 |
USER |
该进程是由哪一个用户建立的 |
PID |
进程的ID号 |
%CPU |
该进程占用CPU资源的百分比,占用越高说明越消耗系统资源 |
%MEM |
该进程占用物理内存的百分比,占用越高说明越消耗系统资源 |
VSZ |
该进程占用虚拟内存的百分比,单位是KB |
RSS |
该进程占用实际物理内存大小,单位是KB |
TTY |
该进程在哪一个终端中运行。tty1tty7表示本地控制终端,tty1tty6是字符终端,tty7是图形终端。pts/0~255表明虚拟终端,?表示此终端是系统启动的 |
STAT |
进程状态 |
START |
该进程的启动时间 |
TIME |
该进程占用CPU的运算时间,数值越高说明越消耗系统资源 |
COMMAND |
产生此进程的命令名 |
1.3.3 进程状态(STAT)
参数 |
含义 |
R(Runing) |
运行 |
S(Sleep) |
休眠 |
T(Terminated) |
中止 |
S(Son) |
包含子进程 |
+ |
位于后台 |
1.4 pstree
1.5 进程的查看(top)
top -b -n 1 > top.txt
复制代码
1.5.1 选项
选项 |
含义 |
-b |
使用批处理模式输出,通常和-n 配合使用 |
-n |
次数,指定top命令执行的次数。通常了-b 选项配合使用 |
-d |
秒数,指定top命令每隔几秒更新。默认是3秒 |
1.5.2 交互模式的命令
选项 |
含义 |
?或h |
显示交互模式的帮助 |
P |
按CPU使用率排序,默认就是此选项 |
M |
之内存的使用率排序 |
N |
以PID排序 |
q |
退出top |
1.5.3 状态栏
1.5.3.1 第一行为任务队列信息
内容 |
说明 |
12:12:12 |
系统的当前时间 |
up 1 day 5:33 |
系统的运行时间,本机已经运行了1天5小时33分 |
2 users |
当前登陆了二个客户端 |
load average 0 0 0 |
系统在以前1分钟、5分钟、15分钟的平均负载。通常认为小于1小时负载较小,大于1超过负载 |
1.5.3.2 第二行为进程信息
内容 |
说明 |
Tasks: 100 total |
系统中的进程总数 |
1 running |
正在运行的进程数 |
94 sleeping |
睡眠的进程 |
0 stopped |
正在中止的进程 |
0 zombie |
僵尸进程。若是不是0的话要进行检查 |
1.5.3.3 第三行为CPU信息
内容 |
说明 |
Cpu(s): 0.1%us |
用户模式占用的CPU百分比 |
0.1%sy |
系统模式占用的CPU百分比 |
0.0%ni |
改变过优先级的用户进程 占用的CPU百分比 |
99.7%id |
空闲CPU的CPU百分比 |
0.1%wa |
等待输入/输出的进程的占用CPU百分比 |
0.1%hi |
硬中断请求服务占用的CPU百分比 |
0.1%si |
软中断请求服务占用的CPU百分比 |
0.0%st |
st(Steal time)虚拟时间百分比,就是当有 |
1.5.3.4 第四行为物理内存信息
内容 |
说明 |
Mem: 1030720k total |
物理内存的问题,单位是KB |
551860k used |
已经使用的物理内存数量 |
478860k free |
空闲的物理内存数量,虚拟机分配了1024M内存,使用了538M,空闲467M |
43180k buffers |
做为缓冲的内存数量,能够存放须要写入硬盘的数据,用来加速数据的写入 |
1.5.3.5 第四行为交换分区信息
内容 |
说明 |
Swap: 2047992k total |
总计的交换分区(虚拟内存)大小 |
536k used |
已经使用的交换分区大小 |
2047456k free |
空闲的交换分区大小 |
368164k cached |
把须要常常读取的数据从硬盘读到内存中,加速了数据的读取 |
1.6 杀死进程(kill)
1.6.1 进程信号
信号 代码 |
信号名称 |
说明 |
示例 |
1 |
SIGHUP |
该信号让进程当即关闭,而后重写读取配置文件后重启,平滑重启 |
kill -1 -HUP 进程号 |
2 |
SIGINT |
程序终止信号,用于关闭前台进程,至关于ctrl+c |
|
9 |
SIGKILL |
用来马上结束程序的运行,本信号不能阻塞、处理和忽略,通常用于强制停止 |
|
15 |
SIGTERM |
正常结束进程的信号,kill命令的默认信号。若是不能正常停止,才会尝试SIGKILL信号 |
|
1.6.2 杀死进程
sleep.shmysql
#!/bin/bash
i=0
while [ $i -le 1000 ]
do
echo $(date)
sleep 1s
done
sh sleep.sh &
ps -ef | grep sleep.sh
kill 进程号
复制代码
2. 系统资源查看
2.1 vmstat
- 监控系统资源使用状态
- vmstat [刷新延时 刷新次数]
vmstat 1 3
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 532 329932 99388 459768 0 0 16 81 59 50 3 1 96 0 0
复制代码
2.1.1 (procs)进程信息字段
分类 |
参数 |
含义 |
procs |
r |
等待运行的进程数,数量越大,系统就越繁忙 |
procs |
b |
不可被唤醒的进程数量,数量越大,系统越繁忙 |
2.1.2 memory(内存信息字段)
分类 |
参数 |
含义 |
memory |
swpd |
使用的Swap空间的大小,单位KB |
memory |
free |
空闲的内存容量,单位KB |
memory |
buff |
缓冲的内存容量,单位KB |
memory |
cache |
缓存的内存容量,单位KB |
2.1.3 swap(交换分区信息)
- 若是说si和so数越大说明数据常常要在磁盘和内存之间数据交换,系统性能就会越差
分类 |
参数 |
含义 |
swap |
si(in) |
从磁盘中交换到内存中的数据的数量,单位KB |
swap |
so(out) |
从内存中交换到硬盘中的数据的数量,单位KB |
2.1.4 io(磁盘读写)
分类 |
参数 |
含义 |
io |
bi(in) |
从块设备读入数据的问题,单位是块 |
io |
bo(out) |
写到块设备的数据的总量,单位是块 |
2.1.5 system(系统信息字段)
分类 |
参数 |
含义 |
system |
in(interrupt) |
每秒被中断的进程次数 |
system |
cs(switch) |
每秒钟进行的事件切换次数 |
2.1.6 CPU(CPU信息字段)
分类 |
参数 |
含义 |
CPU |
us(user) |
非内核进程消耗CPU运算时间的百分比 |
CPU |
sy(system) |
内核进程消耗CPU运算时间的百分比 |
CPU |
id(idea) |
空闲CPU的百分比 |
CPU |
wa(wait) |
等待I/O所消耗的CPU百分比 |
CPU |
st(steal) |
被虚拟机偷走的CPU百分比 |
2.3 free
- 查看内存使用状态
- free [-b|-k|-m|-g]
- 选项
- -b 以字节为单位
- -k 以KB字节为单位
- -m 以MB字节为单位
- -g 以GB字节为单位
# free -m
total used free shared buffers cached
Mem: 1006 687 319 0 98 449
-/+ buffers/cache: 139 866
Swap: 1999 0 1999
复制代码
2.3.1 第一行
分类 |
参数 |
含义 |
total |
内存总数 |
|
used |
已经使用的内存数 |
|
free |
空闲的内存数 |
|
shared |
多个进程共享的内存数 |
|
buffers |
缓冲区内存数 |
|
cached |
缓存内存数 |
|
2.3.2 第二行
参数 |
算法 |
含义 |
- buffers/cache |
第一行的used-buffers-cached |
已经使用的要减去缓存和缓冲的内存量 |
+ buffers/cache |
第一行的free+buffers+cached |
空闲的要加上缓存和缓冲的内存量 |
2.3.3 第三行
分类 |
参数 |
含义 |
total |
swap总数,默认单位是K |
|
used |
已经使用的swap数,默认单位是K |
|
free |
空闲的swap数,默认单位是K |
|
2.6 查看内核相关信息
# uname -a
Linux localhost 2.6.32-279.el6.i686 #1 SMP Fri Jun 22 10:59:55 UTC 2012 i686 i686 i386 GNU/Linux
# uname -s
Linux
# uname -r
2.6.32-279.el6.i686
复制代码
2.7 查看操做系统位数
file /bin/ls
复制代码
2.8 查看发行版本
lsb_release -a
复制代码
2.9 查看发行版本
yum install redhat-lsb -y
lsb_release -v
复制代码
3. 系统定时任务
- 有些任务好比备份数据库等操做须要在系统空闲的时候执行
3.2 crontab
systemctl restart crond.service
复制代码
3.2.3 crontab设置
- crontab [选项]
- 选项
- -e 编辑crontab定时任务
- -l 查询crontab任务
- -r 删除当前用户全部的crontab任务
* * * * * 执行的任务
复制代码
3.2.3.1 语法
# .---------------- 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
复制代码
3.2.3.2 位置
项目 |
含义 |
范围 |
第1个星 |
1个小时中的第几分钟 |
0~59 |
第2个星 |
1天当中的第几小时 |
0~23 |
第3个星 |
1月当中的第几天 |
1~31 |
第4个星 |
1年当中的第几月 |
1~12 |
第5个星 |
1周当中的星期几 |
0~6 |
3.2.3.3 特殊符号
符号 |
含义 |
例子 |
* |
表明任意时间 |
好比第一个星就表明一个小时中每分钟都执行一次 |
, |
表明不连续的时间 |
好比"1,2,3 ",就表明每小时的1分、2分、3分执行命令 |
- |
表明连续的时间范围 |
好比 " 1-5 * ** ",表明每小时的第1分到第5分执行命令 |
*/n |
表明每隔多久执行一次 |
好比 "/10 " 就表明每隔10分钟就执行一次命令 |
0 0 1,10 * 1 |
每个月1号和10号,每周1的0点0分都会执行 |
|
3.2.3.4 案例
符号 |
含义 |
10 22 * |
在天天的22点10分执行 |
0 15 1 |
每周1的15点0分执行 |
0 5 5,10 |
每个月5号和10号的凌晨5点整执行 |
10 5 1-5 |
每周一到周五的凌晨5点10分执行命令 |
/10 10 |
天天凌晨10点钟,每隔10分钟执行一次 |
3.2.3.5 注意事项
- 全部选项不能为空,必须填写
- crontab最小单位是分钟,最大单位是天
- 无论写命令仍是脚本都要使用绝对路径
3.3 系统定时任务
crontab -e
是用户执行的命令,不一样的用户身份能够执行本身的定时任务
- 若是须要系统执行定时任务,能够编辑
/etc/crontab
文件
/etc/crontab
能够指定shell、路径、邮件发送和家目录
3.3.1 /etc/crontab
5 5 * * * echo `date` >> /root/date.log
复制代码
4. 实战任务
4.1 监控nginx
nginx.shnginx
#!/bin/bash
local nginx
nginx=`ps -ef |grep nginx|grep -v grep|wc -l`
if [ $nginx -gt 2 ];then
echo "your nginx is running"
exit 0
else
/bin/systemctl start nginx.service
exit 1
fi
复制代码
4.2 监控mysql状态
mysql.sh算法
#!/bin/sh
PortNum=`netstat -lnt|grep 3306|wc -l`
if [ $PortNum -eq 1 ]
then
echo "mysqld is running."
else
echo "mysqld is stoped."
fi
复制代码
4.3 mysql备份脚本
mysql_backup.shsql
#!/bin/bash
DATE=$(date +%F_%H-%M-%S)
HOST=127.0.0.1
DB=test
USER=root
PASS=abcd1#EFG
MAIL="83687401@qq.com"
BACKUP_DIR=/data/db_backup
if [ ! -d "$BACKUP_DIR" ];then
mkdir -p $BACKUP_DIR
fi
SQL_FILE=${DB}_FULL_$DATE.sql
BAK_FILE=${DB}_FULL_$DATE.zip
cd $BACKUP_DIR
if mysqldump -h$HOST -u$USER -p$PASS -B $DB > $SQL_FILE; then
zip $BAK_FILE $SQL_FILE && rm -rf $SQL_FILE
if [ ! -s $BAK_FILE ]; then
echo "$DATE 备份失败" | mail -s "备份失败" $MAIL
fi
else
echo "$DATE 备份失败" | mail -s "备份失败" $MAIL
fi
find $BACKUP_DIR -name '*.zip' -ctime +14 -exec rm {} \;
复制代码