显示最消耗cpu资源的进程
我们在运维系统的时候,经常需要找出系统中最消耗资源的异常进程,这里汇总一些方法以备参考。
使用ps命令获得消耗资源的进程
ps命令获得消耗资源的进程- 系统中最消耗cpu资源的5个进程: 
ps aux | sort -nrk 3,3 | head -n 5上述命令最关键是 sort -nrk 3,3 :
- -n,- --numeric-sort将字符串作为数值进行排序
- -r,- --reverse反转排序,也就是数字从大到小
- -k,- --key=KEYDEF通过一个key进行排序,这里 KEYDEF 获得位置和类型,由于- ps aux的第三列是CPU使用率,所以- -k 3,3排序就是按照CPU使用率排序
上述命令也特别适合查找出系统中占用内存的进程,非常方便,因为
ps aux命令输出的内容包含:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
输出信息举例
root     192325 13.8  0.1 10615856 49848 ?      Ssl   2020 7290:46 etcd --advertise-client-urls=https://172.19.0.5:2379 --cert-file=/etc/kubernetes/pki/etcd/server.crt --client-cert-auth=true --data-dir=/var/lib/etcd --initial-advertise-peer-urls=https://172.19.0.5:2380 --initial-cluster=dev-control-plane=https://172.19.0.5:2380 --key-file=/etc/kubernetes/pki/etcd/server.key --listen-client-urls=https://127.0.0.1:2379,https://172.19.0.5:2379 --listen-metrics-urls=http://127.0.0.1:2381 --listen-peer-urls=https://172.19.0.5:2380 --name=dev-control-plane --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt --peer-client-cert-auth=true --peer-key-file=/etc/kubernetes/pki/etcd/peer.key --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt --snapshot-count=10000 --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
root     306574 11.0  0.1 1939632 52268 ?       Ssl  20:01   0:00 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --container-runtime=remote --container-runtime-endpoint=/run/containerd/containerd.sock --fail-swap-on=false --node-ip= --fail-swap-on=false
root     306503  7.8  0.1 171716 46496 ?        Ssl  20:01   0:00 kube-apiserver --advertise-address=172.19.0.5 --allow-privileged=true --authorization-mode=Node,RBAC --client-ca-file=/etc/kubernetes/pki/ca.crt --enable-admission-plugins=NodeRestriction --enable-bootstrap-token-auth=true --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key --etcd-servers=https://127.0.0.1:2379 --insecure-port=0 --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key --requestheader-allowed-names=front-proxy-client --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-key-file=/etc/kubernetes/pki/sa.pub --service-cluster-ip-range=10.96.0.0/12 --tls-cert-file=/etc/kubernetes/pki/apiserver.crt --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
root     306175  4.2  0.1 3046892 64940 ?       Ssl  20:01   0:00 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --container-runtime=remote --container-runtime-endpoint=/run/containerd/containerd.sock --fail-swap-on=false --node-ip= --fail-swap-on=false
root       1549  3.0  0.2 3289084 68588 ?       Ssl   2020 3974:41 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock- ps命令也直接支持输出列定制,并且直接支持按照某列进行排序,例如:
ps -Ao user,uid,comm,pid,pcpu,tty --sort=-pcpu | head -n 6输出举例
USER       UID COMMAND            PID %CPU TT
root         0 etcd            192325 13.8 ?
root         0 kubelet         308079  5.5 ?
root         0 kube-apiserver  307961  4.8 ?
root         0 kubelet         307616  3.6 ?
root         0 dockerd           1549  3.0 ?- 使用 - ps命令还可以采用
ps -eo pcpu,pid,user,args --no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 5使用top命令
top提供了batch模式,可以只输出一次采样,然后进行排序:
top -b -n 1 | head -n 12  | tail -n 5top 命令的参数:
- -b表示 batch批处理
- -n 1表示只采样一次
举个例子:
process=java
top -bn 1 | grep "^ *[1-9]" | grep $process| awk '{ if($9 > 20) print $1}'这里
grep "^ *[1-9]"过滤数字开头的行,也就是进程号
参考
Last updated
Was this helpful?