某业务人员反应系统登录不上去,因而程序员本身试着登录系统成功了,内心很自信的认为“个人代码没有问题”,便让业务人员再试试。而后业务人员是登录成功了,可是整个系统用起来很卡,这下程序员意识到是系统的问题了。php
由于刚刚上线了新的功能,想到了配置了定时任务,多是定时任务配置错误,致使PHP启了过多进程。linux
使用命令ps -ef | grep php
查看,果真是起了不少不必的更新数据脚本,其中涉及到与第三方接口的交互而且有大量的更新数据库的操做,因此直接致使系统卡顿。ios
使用命令crontab -l
查看crontab配置,有几个脚本的执行频率是想配置成每小时执行一次,结果配置错误,致使每分钟执行一次。具体以下:git
# 错误配置 * */1 * * * /usr/local/bin/php /data/site/demo/yii demo/sync-product # 正确配置 0 */1 * * * /usr/local/bin/php /data/site/demo/yii demo/sync-product
问题是排查到了,如今须要作的就是快速kill掉那些不必的进程。这时候便想到了万能的awk命令,以下:程序员
ps -ef | grep php | awk '{print $2}' | xargs kill -9
执行后,系统开始恢复稳定。github
整个问题排查总结下来,归根结底仍是配置crontab是不够细心。shell
同时也引起了其余的一些思考,总结后整理以下:数据库
free -g
df -h
iostat -dx
top
具体的系统调优,本文不作介绍了。api
经常使用命令yii
awk '条件类型 1{动做1} 条件类型2{动做2} ...' filename
awk后面接两个引号并加上大括号来设置想要对数据进行的处理动做。
例如:咱们要取出帐号与登陆者的IP,且之间以[TAB]隔开,则:
[release@api_02 ~]$ last -n 5 | awk '{print $1 "\t" $3}' release 117.111.111.11 release 117.111.111.11 release 117.111.111.11 release 117.111.111.11 release 117.111.111.11
awk还存在一些内置变量
变量名称 | 表明意义 |
---|---|
NF | 每一行拥有的字段总数 |
NR | 目前awk处理的是第几行 |
FS | 目前的分隔符,默认为空格键 |
继续上面的例子,需求为:
[release@api_02 ~]$ last -n 5 | awk '{print $1 "\t lines:" NR "\t columns:"NF}' release lines:1 columns:10 release lines:2 columns:10 release lines:3 columns:10 release lines:4 columns:10 release lines:5 columns:10
awk命令还有更多高级的功能,此处就不作介绍了。
crontab配置的规则是:
minute hour day month week command
其中每一个字段的含义以下:
minute: 分钟,取值范围:0-59之间的整数
hour:小时,取值范围:0-23之间的整数
day:日期,取值范围:1-31之间的整数
month:月份,取值范围:1-12之间的整数
week:星期几,取值范围:0-7之间的整数,这里的0或7表明星期日
command:要执行的命令,能够是系统命令,也能够是本身编写的脚本文件。
特殊字符:
星号(*):表示全部值
逗号(,):能够用逗号隔开的值指定一个列表范围,例如,“1,2,6,7”
中杠(-):能够用整数之间的中杠表示一个整数范围,例如“1-3”表示“1,2,3”
正斜线(/):能够用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线能够和星号一块儿使用,例如*/10,若是用在minute字段,表示每十分钟执行一次。
经常使用的一些例子
实例1:每1分钟执行一次command 命令: * * * * * command 实例2:每小时的第3和第15分钟执行 命令: 3,15 * * * * command 实例3:在上午8点到11点的第3和第15分钟执行 命令: 3,15 8-11 * * * command 实例4:每隔两天的上午8点到11点的第3和第15分钟执行 命令: 3,15 8-11 */2 * * command 实例5:每一个星期一的上午8点到11点的第3和第15分钟执行 命令: 3,15 8-11 * * 1 command 实例6:每晚的21:30重启smb 命令: 30 21 * * * /etc/init.d/smb restart 实例7:每个月一、十、22日的4 : 45重启smb 命令: 45 4 1,10,22 * * /etc/init.d/smb restart 实例8:每周6、周日的1 : 10重启smb 命令: 10 1 * * 6,0 /etc/init.d/smb restart 实例9:天天18 : 00至23 : 00之间每隔30分钟重启smb 命令: 0,30 18-23 * * * /etc/init.d/smb restart
《Linux鸟哥的私房菜基础学习第三版--12.4.2章节》