Linux中查看进程信息的指令小结:
一、 ps - report a snapshot of the current processes.
报告当前进程的快照
ps -aux | grep java
下图中的 61410 , 119323 为进程pid 。 这里我运行了两个tomcat,分别是端口8080和端口8081
ps -ef | grep java
找出占用CPU, 内存过高的进程
# cpu占用top10
ps -eo user,pid,pcpu,pmem,args --sort=-pcpu |head -n 10
# 内存占用top10
ps -eo user,pid,pcpu,pmem,args --sort=-pmem |head -n 10
jps指令是一个显示当前所有java进程pid的命令
二、ss和netstat
ss -naltp | grep java
ss - another utility to investigate sockets
netstat -naltp | grep java
netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
三、lsof 、pwdx、prtstat、ls -al /proc/[pid]
top
lsof -i:8080
lsof -p [pid] 查看一个进程的执行文件
#2023-01补充
-i:显示所有连接PID。 lsof -t -i:8080(显示8080端口的PID) lsof -i@127.0.0.1(相当于ping)
ls -al /proc/[pid] | grep exe
pwdx [pid] 查看进程启动时用户的工作目录
prtstat [pid] 查看进程的详细信息
查看进程pid与端口之间关系的脚本
#!/bin/env bash
#write by ddcw at 2021.07.21
echo -e "PID \t PORT \t OPEN_FILEs \t cmdline"
for procnum in /proc/[0-9]*
do
for inodes in $(ls -l ${procnum}/fd | grep socket: | awk -F [ '{print $2}' | awk -F ] '{print $1}')
do
PORT=$(awk -v inode2="${inodes}" '{if ($10 == inode2) print $2}' /proc/net/tcp | awk -F : '{print $2}')
PORT=$((0x${PORT}))
if [[ ${PORT} -gt 0 ]];then
echo -e "${procnum##*/} \t ${PORT} \t $(ls ${procnum}/fd | wc -l) \t\t $(cat ${procnum}/cmdline)"
fi
done
done
脚本来源:https://github.com/ddcw/ddcw/blob/master/shells/getLocalPortProcess.sh
php的cpu突然100怎么排查?怎么定位是那个函数或者配置
perf top -g -p(php-fpm进程号)
这些指令基本满足工作需求。被挖矿了产生了莫名其妙的进程,也可通过上述指令来查找对应的信息。
参考:https://blog.csdn.net/kevin_mails/article/details/91462426 《中了矿机xmrig的毒》
END