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.youkuaiyun.com/kevin_mails/article/details/91462426 《中了矿机xmrig的毒》
END
本文总结了在Linux系统中使用ps、ss、netstat和lsof等命令来查看和管理进程的方法,包括查找Java进程、监控CPU和内存占用、检查端口占用以及定位进程与端口的关系。此外,还提到了当PHP CPU占用过高时的排查方法,并给出了一段用于查找进程与端口关联的脚本。这些工具对于日常系统管理和问题排查非常实用。
1443

被折叠的 条评论
为什么被折叠?



