阿里网站建设教程,网站做友链盈利,wordpress mysql 安装,微信公众号托管平台Day26-进程管理核心知识2 1. top选项介绍2. 进程的三个杀手。2.1 kill2.2 killall 通过进程名字 kill processes by name2.3 pkill 通过进程名称(完整名称) 3. screen命令4. 什么是进程优先级#xff1f;5. strace#xff1a;跟踪进程的系统调用 * 1. top选项介绍
【语法格式… Day26-进程管理核心知识2 1. top选项介绍2. 进程的三个杀手。2.1 kill2.2 killall 通过进程名字 kill processes by name2.3 pkill 通过进程名称(完整名称) 3. screen命令4. 什么是进程优先级5. strace跟踪进程的系统调用 * 1. top选项介绍
【语法格式】top [选项] 参数选项 解释说明(都不重要)
-b 以批处理模式显示进程信息输出结果可以传递给其他程序或写入到文件中。
-c 显示进程的整个命令路径而不是只显示命令名称
-d 指定每两次屏幕信息刷新之间的时间间隔(top -d 1)
-n top输出信息更新的次数完成后将退出top命令
-p 显示指定的进程信息(top -p 进程号)
-u 指定用户的进程搭建集群的时候可能会把程序跑在普通用户下1指定pid查看进程
[rootoldboy ~]# pgrep sshd
1374
1641
13003
[rootoldboy ~]# top -p 13742指定用户查看进程
[rootoldboy ~]# top -u oldboy
top - 21:58:42 up 4 days, 23:33, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 107 total, 1 running, 106 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 4026136 total, 190492 free, 229320 used, 3606324 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 3522556 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND 79410 oldboy 20 0 116588 2960 1656 S 0.0 0.1 0:00.01 bash 79435 oldboy 20 0 4364 352 280 S 0.0 0.0 0:00.00 sleep 3间隔1秒刷新一共2次然后写到文件里
top -d 1 -b -n 2 top.txt然后用awk取列然后sort排序。
4top -a 显示程序全路径
企业面试输入top命令以后想看服务器有几个CPU核心 答按1键。
load average 平均负载 * *
2. 进程的三个杀手。
1)kill 通过发送信号通过PID杀掉进程 2)killall 通过进程名字 3)pkill 通过进程名称(完整名称)
2.1 kill
kill 终止你希望停止的进程。 -l 列出全部的信号名称 -s 指定要发送的信号※
什么是信号 kill命令发给操作系统让操作系统去执行的一个指令.
[rootoldboy ~]# kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN1 36) SIGRTMIN2 37) SIGRTMIN3
38) SIGRTMIN4 39) SIGRTMIN5 40) SIGRTMIN6 41) SIGRTMIN7 42) SIGRTMIN8
43) SIGRTMIN9 44) SIGRTMIN10 45) SIGRTMIN11 46) SIGRTMIN12 47) SIGRTMIN13
48) SIGRTMIN14 49) SIGRTMIN15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX 常见信号列表:
数字信号 信号别名 作用
1 HUP 挂起信号 往往可以让进程重新配置,重新加载
2 INT 中断信号起到结束进程的作用和ctrlc的作用一样
3 QUIT 让进程退出结果是进程退出
9 KILL 直接结束进程不能被进程捕获强制杀死慎用
15 TERM 进程终止这是默认信号
18 CONT 被暂停的进程将继续恢复运行
19 STOP 暂停进程
20 TSTP 用户停止请求作用类似于ctrlz 把进程放到后台并暂停 #后台挂起环境测试
[rootoldboy ~]# rpm -qa vsftpd
vsftpd-3.0.2-27.el7.x86_64
[rootoldboy ~]# yum install -y vsftpd软件名vsftpd FTP服务连接用21数据端口20
[rootoldboy ~]# systemctl start vsftpd
[rootoldboy ~]# netstat -lntup|grep vsftp
tcp6 0 0 :::21 :::* LISTEN 66822/vsftpd 默认不加参数关闭vsftpd
[rootoldboy ~]# pgrep vsftpd
66822
[rootoldboy ~]# kill 66822
[rootoldboy ~]# pgrep vsftpdkill杀不死的时候 可以用kill -9 进程名 #强制杀
生产经验 1.强制杀导致服务起不来。一般不要操作宁愿等一会。 2.数据服务不能强杀 mysql,oracle,mongodb数据库里磁盘上有自己的文件系统千万别强杀。 3.非数据服务可以强杀nginx,vsftpd(数据在磁盘上)
[rootoldboy ~]# kill -9 pgrep vsftpd
[rootoldboy ~]# pgrep vsftpd改配置文件不重启直接生效 1 HUP 挂起信号 往往可以让进程重新配置,重新加载 kill -1 进程ID
发送重启信号例如 vsftpd 的配置文件发生改变希望重新加载
[rootoldboyedu ~]# kill -1 9160发送停止信号vsftpd 服务有停止的脚本 systemctl stop vsftpd 模拟ctrlz快捷键暂停进程并放入后台。
[rootoldboy ~]# kill -20 79658
[oldboyoldboy ~]$ sleep 100
[1] Stopped sleep 100继续运行
[oldboyoldboy ~]$ bg 1
[1] sleep 100 NGINX 有关KILL生产经验 启动nginx服务需要提前编译
[rootoldboy ~]# /application/nginx/sbin/nginx
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()查看80端口是什么服务
[rootoldboy ~]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 74537 root 6u IPv4 397649 0t0 TCP *:http (LISTEN)
nginx 74538 nobody 6u IPv4 397649 0t0 TCP *:http (LISTEN)
[rootoldboy ~]# netstat -lntup|grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 74537/nginx: master netstat参数 -l 监听 -n 数字显示 -t tcp -u udp -p 进程名
nginx服务有关kill信号
1、测试配置文件是否有异常
/application/nginx/sbin/nginx -t2、启动
/application/nginx/sbin/nginx3、指定配置文件启动
/application/nginx/sbin/nginx -c /application/nginx/conf/nginx.conf重点 4、重新打开日志
kill -USR1 cat /application/nginx/logs/nginx.pid #进程号5、发送【平滑】升级信号
银行服务17点下班了没有进去的不能进已经进去的继续服务
kill -USR2 cat /application/nginx/logs/nginx.pid6、平缓停止worker process kill -WINCH cat /application/nginx/logs/nginx.pid.oldbin7、停止老的进程
kill -QUIT cat /application/nginx/logs/nginx.pid.oldbin生产经验 判断进程是否存在方法1
kill -0 pid #是不发送关闭停止信号但是会检查进程是否存在。生产用途检查进程是否存在。实际应用mysql服务关闭的时候。 kill PID 以后学习shell脚本开发关闭服务的时候就可以用kill -0 如果vsftpd存在则输出1否则输出0
[rootoldboy ~]# kill -0 pgrep vsftpd 2/dev/null echo 1||echo 0
1杀掉vsftpd
[rootoldboy ~]# killall vsftpd检查
[rootoldboy ~]# kill -0 pgrep vsftpd 2/dev/null echo 1||echo 0
0
[rootoldboy ~]# pgrep vsftpd判断进程是否存在方法2
[rootoldboy ~]# pgrep vsftpd /dev/nullecho 1||echo 0
1
[rootoldboy ~]# killall vsftpd
[rootoldboy ~]# pgrep vsftpd /dev/nullecho 1||echo 0
02.2 killall 通过进程名字 kill processes by name
killall 进程名 连着执行直到看到后面提示no process found
[rootoldboy ~]# killall nginx
[rootoldboy ~]# killall nginx
nginx: no process foundkillall -9 进程名 killall -u 用户 问题杀死很慢。。不断重复执行
2.3 pkill 通过进程名称(完整名称)
pkill [选项] [进程名] -t 终端 杀死指定终端进程※ -u 用户 杀死指定用户的进程※
[rootoldboy ~]# pgrep vsftpd /dev/nullecho 1||echo 0
0
[rootoldboy ~]# systemctl start vsftpd
[rootoldboy ~]# pgrep vsftpd /dev/nullecho 1||echo 0
1
[rootoldboy ~]# pkill vsftpd #杀进程名
[rootoldboy ~]# pgrep vsftpd /dev/nullecho 1||echo 0
0
[rootoldboy ~]# ps -ef|grep vsftp
root 79996 1645 0 23:46 pts/0 00:00:00 grep --colorauto vsftp
[rootoldboy ~]# ps -ef|grep vsftp|grep -v grep|wc -l
0
[rootoldboy ~]# systemctl start vsftpd
[rootoldboy ~]# ps -ef|grep vsftp|grep -v grep|wc -l
1
[rootoldboy ~]# ps -ef|grep vsftp|grep -v grep
root 80008 1 0 23:46 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf指定用户
[rootoldboy ~]# pkill -u oldboy crond
[rootoldboy ~]#
[rootoldboy ~]# pkill -u oldboy crond-t 终端 杀死指定终端进程※
[rootoldboy ~]# pkill -t pts/1[oldboyoldboy ~]$ bg 1
Session terminated, killing shell... ...killed.重点总结:
pkill 进程名 #一次杀死
killall 进程名 #多次。-9 强杀 会引起服务起不来-u 用户
kill PID #默认不会引起服务起不来。
kill -HUP PID #平滑重启重新加载配置。
kill -0 PID #检查进程是否存在。实际应用mysql服务关闭的时候。
kill -9 PID #强杀 #可能会引起服务起不来sed -i.bak s#worker_processes 1;#worker_processes 16;#g /application/nginx/conf/nginx.conf|grep work批量杀进程
ps -ef|grep nginx|awk {print $2}|sed -r s#(.*)#kill \1#g|bash【进程前后台切换】
为什么要学习进程前后台切换 1远程拷贝大文件持续时间长的操作。 为了防止中断一般要放在后台运行。 2有些进程需要定时执行 3需要一直运行守护进程。命令或操作 ctrlz 暂停当前进程。 bg 放入后台。 fg 拿回前台。 jobs 查看当前队列含ID。
人工执行的程序前后台切换
启动命令默认放后台加参数放到后台。shell脚本命令放后台
kill %id
睡觉 sleep 1 #数字秒数1秒 usleep 1000 #微秒1毫秒
shell脚本命令放后台
方法2使用符号。
sleep 200 #放后台运行脚本或命令要全路径。nohup用户退出系统进程继续工作
【功能说明】 nohup命令可以将程序以忽略挂起信号的方式运行起来被运行程序的输出信息将不会显示到终端。 无论是否将nohup命令的输出重定向到终端输出都将写入到当前目录的nohup.out 文件中。 如果当前目录的nohup.out文件不可写输出重定向到$HOME/nohup.out文件中。 企业应用
nohup 路径/shell脚本 方法3screen 总结让程序进入后台运行方法
ctrlz,jobs,fg,bg前台的程序,进入后台,后台运行 ##临时用使用screen (推荐) ##管理员常用下班了想回家xshell有没有执行完的任务。使用符号 ##后台运行脚本常用
3. screen命令
作用:保持操作过的窗口连接状态。
1.安装
[rootoldboy ~]# yum install screen -y2.开启一个screen窗口,指定名称
[rootoldboy ~]# screen -S sleep3.在screen窗口中执行任务即可
while true;do echo oldboy /tmp/oldboy.log;sleep 1;done#每隔一秒向/tmp/oldboy.log追加oldboy
4.平滑的退出screen,但不会终止screen中的任务。
ctrlad注意: 如果使用exit 才算真的关闭screen窗口
5.关闭xshell模拟下班回家
第二天重开xshell连接。
查看当前正在运行的screen有哪些
[rootoldboy ~]# screen -list
There is a screen on:22058.sleep (Detached)
1 Socket in /var/run/screen/S-root.6.此时需要进入昨晚的会话进入正在运行的screen
[rootoldboy ~]# screen -r sleep
[rootoldboy ~]# 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 或 screnn -S 窗口名称
2.退出窗口
ctrlad
3.显示当前所有screen窗口
screen -ls
4.恢复,重新进入
screnn -r id
4. 什么是进程优先级
进程执行时候是排队执行的需要插队要调整。 进程重要性高需要优先多分配CPU。调整优先级。
#%1 #记住用途 nice 调整【程序运行时】的优先级 renice调整【运行中的进程】的优先级
区别: nice命令常用于修改未运行的程序再运行时的优先级 但是对于正在运行的进程若想要修改优先级就需要用到renice命令。
5. strace跟踪进程的系统调用 *
系统调用:系统为应用程序提供的连接接口 进程执行调用很多接口。。
为什么要跟踪进程的系统调用 查找进程执行异常的原因 PHP进程JAVA进程cpu%100,怎么排查 进程执行调用很多接口接口如果异常进程就会不正常。。
strace是Linux环境下的一款程序调试工具用来检查一个应用程序所使用的系统调用及它所接收的系统信息。strace会追踪程序运行时的整个生命周期输出每一个系统调用的名字、参数、返回值和执行消耗的时间等是高级运维和开发人员的排查问题的杀手锏。
-p pid 指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可※
-f 跟踪目标进程以及目标进程创建的所有子进程※
-tt 在输出中的每一行前加上时间信息精确到微秒。例子11:18:59.759546※范例1排查Nginx 403 forbidden错误。
[rootLNMP ~]# strace -tt -f /application/nginx/sbin/nginx 范例2只跟踪和文件操作有关的系统调用。
范例1的命令结果输出太多了很容易看花眼因此可以使用过滤器过滤掉无关信息比如只查看文件操作信息。
[rootLNMP ~]# strace -tt -f -e tracefile /application/nginx/sbin/nginx #-e tracefile的作用为只跟踪和文件操作有关的系统调用。
[rootoldboy ~]# strace -tt -p 80008范例3跟踪系统调用统计。 strace不仅能追踪系统调用使用选项-c还能将进程所有的系统调用做一个统计分析。
[rootLNMP ~]# strace -c /application/nginx/sbin/nginx #使用-c参数给进程所有的系统调用做一个统计分析。使用-o选项将strace的结果输出到文件中
strace -c -o tongji.log /application/nginx/sbin/nginx小结strace命令很适合程序僵尸、命令执行报错等的问题如果从程序日志和系统日志中看不出问题出现的原因就可以strace一下也许有答案不过也需要使用者有足够的耐心去查看输出
案例1给/etc/passwd加锁然后用strace追踪。
[rootoldboy ~]# chattr i /etc/passwd
[rootoldboy ~]# 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百分百了。请问你怎么解决 1pgrep 进程获取进程号 2strace -p 进程号 发现问题。
用户案例 链接: https://blog.csdn.net/msllws/article/details/107090542
strace关键词。
参数选项解释说明 (带*的为重点)-c统计每一系统调用的所执行的时间次数和出错的次数等-d输出strace关于标准错误的调试信息-f跟踪目标进程以及目标进程创建的所有子进程*****-ff如果提供-o filename则所有进程的跟踪结果输出到相应的filename.pid中pid是各进程的进程号-i输出系统调用的入口指针-q禁止输出关于脱离的消息-r输出每一个系统调用的相对时间-t在输出中的每一行前加上时间信息。例子: 16:45:28-tt在输出中的每一行前加上时间信息精确到微秒。例子: 11:18:59.759546*****-T显示每次系统调用所花费的时间-ofilename 将strace的输出写入文件filename*****-ppid 指定要跟踪的进程pid要同时跟踪多个pid重复多次-p选项即可*****-sstrsize 指定输出的字符串的最大长度默认为32。文件名没有被视为字符串默认全部输出-uusername 以username的UID和GID执行被跟踪的命令
-e expr 输出过滤器通过表达式可以过滤掉你不想要的输出 expr是一个表达式,用来控制如何跟踪:[qualifier][!]value1[,value2]…
说明 1、qualifier只能是trace,abbrev,verbose,raw,signal,read,write其中之一 2、value是用来限定的符号或数字 3、默认的qualifier是trace 4、感叹号是否定符号
例如 -e open等价于 -e traceopen,表示只跟踪open调用 而-e trace!open表示跟踪除了open以外的其他调用
常见选项
参数选项解释说明-e trace[set]只跟踪指定的系统调用-e tracefile只跟踪和文件操作有关的系统调用*****-e traceprocess只跟踪和进程控制有关的系统调用-e tracenetwork只跟踪和网络有关的系统调用-e tracesignal只跟踪和系统信号有关的系统调用-e tracedesc只跟踪和文件描述符有关的系统调用-e traceipc只跟踪和进程通讯有关的系统调用-e abbrev[set]设定strace输出的系统调用的结果集-e raw[set]将指定的系统调用的参数以十六进制显示-e signal[set]指定跟踪的系统信号-e read[set]输出从指定文件中读出的数据-e write[set]输出写入到指定文件中的数据
企业生产经验 资源不够用网站运行慢。
没有给充足资源。 上线前压测,提前测出来承受能力。 提前预警。70% 预警时间是资源增加的最长周期当下百分比80%。开发代码上线BUG异常消耗资源导致100% strace,gdb.后知后觉。公司推广部门合作广告大流量过来广告页CDN提前准备。 运维感受到的服务器流量增加压力增大CPU ,内存磁盘都压力很大了。 所有和网站相关的部门开发运维、运营、市场客服查询 离线查询和生产用户访问库分开 对于外部用户检测根据趋势预判。
top ps pstree pgrep kill killall pkill strace ltrace bg fg jobs kill % screen nohup lsof netstat nice命令常用于修改未运行的程序再运行时的优先级 renice调整【运行中的进程】的优先级 uptime w
ltrace跟踪进程调用库函数 ltrace 能够跟踪进程的库函数调用它会显现出哪个库函数被调用而strace则是跟踪进程的每个系统调用。
参数选项 解释说明带※的为重点 -c 统计库函数每次调用时间最后程序退出时打印摘要 -C 解码低级别名称内核级为用户级名称 -d 打印调试信息 -e expr 输出过滤器通过表达式可以过滤掉你不想要的输出※ -e printf 表示只查看printf函数调用 -e !printf 表示查看除printf函数以外的所有函数调用 -f 跟踪子进程 -o filename 将ltrace的输出写入文件filename -p pid 指定要跟踪的进程pid※ -r 输出每一个调用的相对时间 -S 显示系统调用 -t 在输出中的每一行前加上时间信息。例子16:45:28 -tt 在输出中的每一行前加上时间信息精确到微秒。例子11:18:59.759546 -ttt 在输出中的每一行前加上时间信息精确到微秒而且时间表示为unix时间戳。 例子1486111461.650434 -T 显示每次调用所花费的时间 -u username 以username 的UID和GID执行被跟踪的命令
ltrace -o nginx.log /application/nginx/sbin/nginx