目录
1 、CPU利用率和负载的关系
2、进程管理
3、taskset管理多核CPU的负载
1、CPU利用率针对单个CPU而言,CPU负载反映等待CPU的进程数
CPU利用率指的是进程运行时占用CPU的百分比;
CPU当前繁忙:利用率忽高忽低(%idle),可能是占用CPU的进程处于IO等待状态未释放(iostat可查)
CPU负载指的是某段时间占用CPU的进程和等待CPU的进程数(等待被唤醒的进程:不包括wait);
CPU利用率高并不意味着CPU负载大:例如一个进程一直使用CPU,占用率100%;同时执行两个进程,CPU利用率仍为100%,但负载为2;意味着CPU需要在不同进程间来回切换。
一句话总结:CPU利用率是纵向的,CPU负载是横向的
2、主要包括进程信号和信号传达,进程优先级调整
常见进程信号有3个:
-1: SIGHUP 用于启动进程,进程会重新读取pid文件
-9: SIGKILL 强制终止进程,会产生半成品
-15: SIGTERM 以正常程序终止进程
进程间信号的传达方式:
kill:终止某一进程如 kill -9 15581
killall:终止某一服务所有进程如 killall httpd
pkill:pkill=pgrep + kill, 和killall类似,区别是可以输入进程的部分名称就能操作,而killall输入的进程名称如果不全会报错。如 pkill http
进程优先级:
进程的优先级(priority)决定CPU执行进程的顺序,
用户调整PRI需要通过nice值:nice, renice
命令的区别在于nice用于初始PID的nice调整,而renice用于已存在的PID的nice调整;
PRI=PRI+nice,但最终的nice值内核会做调整。
规范:
root用户:可调整所有人的nice,调整范围-20~19
普通用户:只能调整自己的nice,只能调高:0~19
调整示例:
nice -n 19 vi & 给vi进程设置nice为19并放到后台执行
renice 10 18425 给PID 18425设置nice为+10
3、如果是多核CPU,进程管理需要用到teskset进行负载调整
1)查看CPU信息: cat /proc/cpuinfo
2)查看不同CPU的使用情况: mpstat -P ALL 1 10
3)pidstat确定问题进程: pidstat
4)tastset切换进程到特定CPU:
taskset -C 0 sh nginx_oneclick.sh 将nginx_oneclick.sh 运行在0号CPU上
taskset -P -C 0 18254 将PID=18254的进程,运行在0号CPU上