mysql> SHOW FULL PROCESSLIST\G;*************************** 5. row ***************************Id: 197343User: rootHost: 127.0.0.1:41354db: xxxCommand: QueryTime: 0State: SleepInfo: show process list 關鍵信息:Host 欄顯示客戶端 IP:端口 (127.0.0.1:41354),Command 為 Sleep 通常意味著連接池空閒連接。
netstat -anp | grep 41354tcp 0 0 127.0.0.1:41354 127.0.0.1:3307 ESTABLISHED 1167/php test.php 得到 PID 1167,命令 php test.php。
lsof -p 1167COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEphp 1167 user cwd DIR 253,0 4096 2 /home/user/projectphp 1167 user txt REG 253,0 5.2M 12 /usr/bin/php7.4php 1167 user mem REG 253,0 1.1M 34 /lib/x86_64-linux-gnu/libc-2.31.so...php 1167 user 4u REG 253,0 2048 56 /home/user/project/test.php 直接定位到 /home/user/project/test.php,進一步審查 SQL 慢查詢、死循環、連接未釋放等問題。
#!/bin/bash# 找出所有連接 MySQL 的進程及執行腳本mysql -e "SHOW PROCESSLIST" | awk '/^[0-9]+/ {print $3}' | cut -d: -f2 | sort -u | while read port; do pid=$(netstat -tnp 2>/dev/null | grep ":$port " | awk '{print $7}' | cut -d/ -f1) if [ -n "$pid" ]; then echo "Port $port -> PID $pid -> $(ps -p $pid -o cmd=)"; lsof -p $pid 2>/dev/null | grep -E '\.php$|\.py$|\.pl$|\.java$' | head -1; fi;done MySQL 5.6+ 啟用 performance_schema,配合 sys schema 視圖:
SELECT * FROM sys.processlist WHERE db = 'my_db' ORDER BY time DESC;SELECT * FROM sys.schema_table_lock_waits;SELECT * FROM sys.user_summary_by_statement_latency; 可直接在 SQL 層面關聯會話、鎖等待、語句延遲,無需跳轉系統層。