Java教程

续讲进程管理

本文主要是介绍续讲进程管理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

top选项介绍

【语法格式】top [选项] 
参数选项	解释说明(都不重要)
-b	以批处理模式显示进程信息,输出结果可以传递给其他程序或写入到文件中。
-c	显示进程的整个命令路径,而不是只显示命令名称
-d	指定每两次屏幕信息刷新之间的时间间隔(top -d 1)
-n	top输出信息更新的次数,完成后将退出top命令
-p	显示指定的进程信息(top -p 进程号)
-u  指定用户的进程(搭建集群的时候可能会把程序跑在普通用户下)
指定pid查看进程 pgrep sshd
top -p 1374
指定用户查看进程
top -u oldboy
间隔1秒刷新,一共2次,然后写到文件里
top -d 1 -b -n 2 > top.txt
然后用awk取列,然后sort排序。
top -a 显示程序全路径

管理进程状态

kill、killall,pkill(进程的三个杀手)
kill终止你希望停止的进程
kill -l列出当前系统所支持的信号
kill -s 制定要发送的信号
信号:kill命令发给操作系统,让操作系统去执行的一个指令
常用的数字编号             信号含义                    信号翻译
1                         HUP                通常用来重新加载配置文件
2                         INT                 中断信号,起到结束的作用,(ctrl+c)
3                         QUIT                      退出进程 
9                         KILL                   强制杀死进程
15                        TERM                终止进程,默认kill使用该信号
18                        CONT                       被暂停的进程回复运行        
19                        STOP                       暂停进程
20                        TSTP                     把程序放后台挂起(ctrk+z)
kill -9 强杀,可能会导致进程起不来,一般不推荐
数据服务不能强杀  mysql oracle mongodb(数据库里,磁盘上有自己的文件系统),千万别强杀
分数据服务可以强杀,nginx vsftpd(数据在磁盘上)
pgrep XXX  找服务的pid
kill -20 后的进程 bg 1  放后台继续运行

查看80端口是什么服务?
lsof -i :80
netstat -lntup|grep 80
netstat参数
-l 监听
-n 数字显示
-t  tcp
-u  udp
-p  进程名
-------------------------------------------------------------------------------
nginx服务有关kill信号:
1、测试配置文件是否有异常:
/application/nginx/sbin/nginx -t
2、启动:
/application/nginx/sbin/nginx
3、指定配置文件启动:
/application/nginx/sbin/nginx -c /application/nginx/config/nginx.conf
重点:
4、重新打开日志:
kill -USR1 `cat /application/nginx/logs/nginx.pid` 进程号
5、发送【平滑】升级信号:
kill -USR2 `cat /application/nginx/logs/nginx.pid`
6、平缓停止worker process
kill  -WINCH `cat /application/nginx/logs/nginx.pid.oldbin
7、停止老的进程
kill -QUIT `cat /application/nginx/logs/nginx.pid.oldbin`
--------------------------------------------------------------------------------
killall 通过进程名字 kill processes by name
killall 进程名
生产经验:
判断进程是否存在方法1:
kill -0 pid  是不发送关闭停止信号,但是会检查进程是否存在。
生产用途:检查进程是否存在。实际应用,mysql服务关闭的时候。
kill PID
以后学习shell脚本开发,关闭服务的时候,就可以用kill -0
如果vsftpd存在则输出1,否则输出0
kill -0 `pgrep vsftpd` 2>/dev/null && echo 1||echo 0
1
杀掉vsftpd
killall vsftpd
检查
kill -0 `pgrep vsftpd` 2>/dev/null && echo 1||echo 0
0
pgrep vsftpd
判断进程是否存在方法2:
pgrep vsftpd &>/dev/null&&echo 1||echo 0
1
killall vsftpd
pgrep vsftpd &>/dev/null&&echo 1||echo 0
0
pkill
-t 终端 杀死指定终端进程
-u 用户	杀死指定用户的进程
使用pkill踢出从远程登录到本机的用户,终止pts/0上所有进程, 并且bash也结束(用户被强制退出)
pkill -9 -t pts/0
总结:
pkill   进程名  一次杀死
killall 进程名  多次。
  -9 强杀 会引起服务起不来
  -u 用户
kill    PID          默认不会引起服务起不来。
kill    -HUP  PID    平滑重启(重新加载配置。)
kill    -0   PID     检查进程是否存在。实际应用,mysql服务关闭的时候。
kill    -9   PID     强杀   可能会引起服务起不来
批量杀进程
ps -ef|grep nginx|awk '{print $2}'|sed -r 's#(.*)#kill \1#g'|bash
2)命令或操作
ctrl+z 暂停当前进程。
bg 放入后台。
fg 拿回前台。
jobs 查看当前队列,含ID。
kill %id
睡觉:
sleep  1      数字秒数,1秒
usleep 1000   微秒,1毫秒
---------------------------------------------------------
sell脚本(命令)放后台
方法2:使用&符号。
sleep 200 & 放后台运行,脚本或命令要全路径。
----------------------------------------------------------
总结:让程序进入后台运行方法
1.ctrl+z,jobs,fg,bg前台的程序,进入后台,后台运行  临时用
2.使用screen (推荐)  管理员常用,下班了想回家,xshell有没有执行完的任务。
3.使用&符号          后台运行脚本常用

nohup:用户退出系统进程继续工作

功能说明】
nohup命令可以将程序以忽略挂起信号的方式运行起来,被运行程序的输出信息将不会显示到
终端。 
无论是否将nohup命令的输出重定向到终端,输出都将写入到当前目录的nohup.out 文件中。
如果当前目录的nohup.out文件不可写,输出重定向到$HOME/nohup.out文件中。
企业应用:
nohup 路径/shell脚本 &

方法3 管理后台进程 screen

1)安装
yum install screen -y
2)开启一个screen窗口,指定名称
screen -S sleep
3)在screen窗口中执行任务即可
while true;do echo oldboy >>/tmp/oldboy.log;sleep 1;done
每隔一秒向/tmp/oldboy.log追加oldboy
4)平滑的退出screen,但不会终止screen中的任务。
ctrl+a+d
注意: 如果使用exit 才算真的关闭screen窗口
5)关闭xshell模拟下班回家,
第二天重开xshell连接。
查看当前正在运行的screen有哪些
screen -list
6)此时需要进入昨晚的会话,进入正在运行的screen
screen -r sleep
screen -r 22058
常用screen参数
screen -S yourname     新建一个叫yourname的session
screen -ls             列出当前所有的session
screen -r yourname     回到yourname这个session
screen -d yourname     远程detach某个session
screen -d -r yourname  结束当前session并回到yourname这个session

重点总结:
1.创建screen回话
screen或screen -S 窗口名称
2.退出后窗口
ctrl+a+d
3.显示当前所有screen窗口
screen -ls
4.回复,重新进入
screen -r id

调整进程优先级 nice、renice

优先体验
nice指定程序的优先级。值越高,优先级越低;值越低,优先级越高。
nice -n 优先级数字 进程名称
NI=0  PR=20    NI=-20  PR=0    NI=10  PR=30
NI与PR相差 20
nice -n Number  启动一个程序为其配置优先级

renice命令修改一个进程的优先级
renice -n 优先级数字 进程pid
renice  -n -Number -p pid

strace:跟踪进程的系统调用

系统调用:系统为应用程序提供的连接接口
进程执行:调用很多接口。
strace是Linux环境下的一款程序调试工具,用来检查一个应用程序所使用的系统调用及它所接
收的系统信息。strace会追踪程序运行时的整个生命周期,
输出每一个系统调用的名字、参数、返回值和执行消耗的时间等,
是高级运维和开发人员的排查问题的杀手锏。
-p pid	指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可※
-f	跟踪目标进程,以及目标进程创建的所有子进程※
-tt	在输出中的每一行前加上时间信息,精确到微秒。
范例9-36:跟踪系统调用统计。
strace不仅能追踪系统调用,使用选项-c还能将进程所有的系统调用做一个统计分析。
strace -c /application/nginx/sbin/nginx  
 <==使用-c参数给进程所有的系统调用做一个统计分析。
 
使用-o选项将strace的结果输出到文件中
strace -c -o tongji.log /application/nginx/sbin/nginx

小结:strace命令很适合程序僵尸、命令执行报错等的问题,如果从程序日志和系统日志中看
不出问题出现的原因,就可以strace一下,也许有答案,
不过也需要使用者有足够的耐心去查看输出!

案例

案例1:给/etc/passwd加锁,然后用strace追踪。
chattr +i /etc/passwd
strace -f useradd abc
发现问题:无法打开/etc/passwd
open("/etc/passwd", O_RDWR|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW) = -1 EACCES 
(Permission denied)
write(2, "useradd: cannot open /etc/passwd"..., 33useradd: cannot open 
/etc/passwd
企业案例:PHP进程CPU百分百了。请问你怎么解决?
1)pgrep 进程,获取进程号
2)strace -p 进程号 发现问题。
用户案例:
https://blog.csdn.net/msllws/article/details/107090542

strace关键词。
企业生产经验:
资源不够用:网站运行慢。
1.没有给充足资源。
上线前压测,提前测出来承受能力。
提前预警。70% 预警时间是(资源增加的最长周期+当下百分比<80%)。
2.开发代码上线,BUG异常消耗资源,导致100%
strace,gdb.后知后觉。
3.公司推广部门(合作广告),大流量过来,广告页(CDN),(提前准备)。
运维感受到的:服务器流量增加,压力增大,CPU ,内存,磁盘都压力很大了。
所有和网站相关的部门,开发,运维、运营、市场,客服(查询 离线查询,和生产用户访问
库,分开)
对于外部用户,检测,根据趋势预判。
这篇关于续讲进程管理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!