🔄 卡若AI 同步 2026-02-21 13:04 | 更新:金仓、水桥平台对接、运营中枢工作台 | 排除 >20MB: 5 个
This commit is contained in:
@@ -109,6 +109,7 @@ python3 "/Users/karuo/Documents/个人/卡若AI/01_卡资(金)/金仓_存储
|
||||
- **SSH**:`ssh -p 22022 -i "服务器管理项目/Steam/id_ed25519" root@43.139.27.93`(私钥须 `chmod 600`)
|
||||
- 本机快速检查:`ping 43.139.27.93`、`nc -zv 43.139.27.93 22022`
|
||||
- 服务器内诊断与限流:在 **宝塔面板终端** 执行文档「六」中 6.1~6.3 命令(连接数、按 IP 统计、Nginx 限速)。
|
||||
- **502 修复(如 soul.quwanzhi.com/admin)**:API 方式运行 `scripts/kr宝塔_宝塔API_修复502.py`(需 API 白名单);或到 kr宝塔 **宝塔面板 → 终端** 执行 `nginx -t && nginx -s reload` 后,在「Node 项目」中重启 soul 相关项目。详见文档 6.6。
|
||||
|
||||
### 5. 常用诊断命令(kr宝塔等)
|
||||
|
||||
|
||||
@@ -147,7 +147,78 @@ limit_rate 500k; # 单连接限速 500KB/s,可按需改
|
||||
|
||||
改完后 `nginx -t && nginx -s reload`。
|
||||
|
||||
### 6.4 腾讯云控制台可做
|
||||
### 6.4 列出占满带宽的程序 / 端口 / 网站及占用比例
|
||||
|
||||
在服务器上运行**带宽占用排查脚本**,会输出:监听端口与进程、按端口/进程的连接数占比(≈ 带宽占比)、Nginx 站点、Node/PM2 进程、以及若已安装 nethogs 的实时带宽占比。
|
||||
|
||||
在 kr宝塔 **宝塔面板 → 终端** 执行脚本。两种方式任选:
|
||||
|
||||
- **方式一**:把脚本上传到服务器后执行
|
||||
`bash /路径/kr宝塔_带宽占用排查.sh`
|
||||
- **方式二**:在本机打开脚本,全文复制到宝塔终端粘贴执行
|
||||
脚本路径:`01_卡资(金)/金仓_存储备份/服务器管理/scripts/kr宝塔_带宽占用排查.sh`脚本会列出:
|
||||
- **【1】监听端口与进程**:可能占带宽的服务(Nginx、Node、宝塔、SSH 等)
|
||||
- **【2】按端口连接数占比**:各端口当前连接数及占比(近似该端口占用带宽比例)
|
||||
- **【3】按进程连接数占比**:各 PID 连接数及占比(近似该程序占用带宽比例)
|
||||
- **【4】Nginx 站点**:端口 → 域名/网站
|
||||
- **【5】Node/PM2 进程**:常见占带宽应用
|
||||
- **【6】实时带宽**:若已安装 nethogs,采样 5 秒得到各进程实时 KB/s 占比
|
||||
|
||||
**说明**:无 nethogs 时,用「连接数占比」近似「带宽占比」;精确带宽以 nethogs 或宝塔「监控」为准。
|
||||
|
||||
### 6.5 可能占满带宽的程序 / 端口 / 网站清单(kr宝塔 当前)
|
||||
|
||||
以下为服务器上**正在监听**的程序与端口,均可能产生带宽占用。实时「带宽占比」需在宝塔终端运行上面脚本或 `nethogs -t`。
|
||||
|
||||
| 类型 | 程序/进程 | 监听端口 | 说明 / 对应网站 |
|
||||
|------|-----------|----------|------------------|
|
||||
| Web 入口 | nginx | 80, 443, 888, 19999 | 所有 HTTPS/HTTP 流量经此转发;站点见下表 |
|
||||
| Node 应用 | next-server | 3000, 3001, 3005, 3015, 3031, 3036, 3043, 3045, 3050, 3055, 3081, 3305 | 多个 Next.js 站点(soul、zhiji、dlm、word、wzdj、玩值大屏、神射手、AITOUFA 等) |
|
||||
| 后端 API | soul-api | 8080, 8081 | soul 相关接口 |
|
||||
| 网关/内网 | python3 | 8000(127.0.0.1) | 卡若AI 网关等 |
|
||||
| 面板/系统 | BT-Panel | 9988 | 宝塔面板 |
|
||||
| 面板/系统 | sshd | 22022 | SSH |
|
||||
| 数据库/缓存 | redis-server | 6379 | Redis |
|
||||
| 数据库/缓存 | mongod | 27017 | MongoDB |
|
||||
| 其他 | pure-ftpd, master(25), containerd, dockerd | 21, 25, 2375, 37455 | FTP、邮件、Docker |
|
||||
|
||||
**端口 → 网站/域名(部分)**:80/443 上由 Nginx 按 `server_name` 分发到不同站点,例如:soul.quwanzhi.com、kr-ai.quwanzhi.com、soulapi.quwanzhi.com、www.quwanzhi.com、ckb.quwanzhi.com、dlm.quwanzhi.com、word.quwanzhi.com、wzdj.quwanzhi.com、zp.quwanzhi.com、zhiji.quwanzhi.com、wz-screen.quwanzhi.com、ai-tf.quwanzhi.com、kr_wb.quwanzhi.com、discuzq.quwanzhi.com、www.lkdie.com、feishu.lkdie.com 等(完整列表见 Nginx 配置目录 `/www/server/panel/vhost/nginx/`)。
|
||||
|
||||
**带宽占比**:当前瞬时连接数较少时,无法单次采样得到稳定占比。请在服务器上运行 **6.4 的脚本** 或执行 `nethogs -t` 采样 10~30 秒,即可得到各进程的实时带宽占比(KB/s 或 %)。
|
||||
|
||||
### 6.6 502 Bad Gateway 修复(含 soul.quwanzhi.com/admin)
|
||||
|
||||
**原因**:Nginx 能通,但上游(Node/后端)无响应或挂掉,导致 502。
|
||||
|
||||
**方式一:宝塔 API(需本机 IP 已加入 kr宝塔 API 白名单)**
|
||||
|
||||
```bash
|
||||
python3 "/Users/karuo/Documents/个人/卡若AI/01_卡资(金)/金仓_存储备份/服务器管理/scripts/kr宝塔_宝塔API_修复502.py"
|
||||
```
|
||||
|
||||
脚本会:重启 Nginx、并尝试重启名称含 soul 的 Node 项目。若报「IP校验失败」,请到 kr宝塔 面板 **设置 → API 接口** 将当前公网 IP 加入白名单后重试。
|
||||
|
||||
**方式二:在 kr宝塔 宝塔面板终端执行(不依赖 API 白名单)**
|
||||
|
||||
```bash
|
||||
# 1. 重载 Nginx
|
||||
nginx -t && nginx -s reload
|
||||
|
||||
# 2. 重启 soul 相关 Node/PM2(按你实际项目名调整)
|
||||
pm2 list
|
||||
pm2 restart soul # 或 souladmin、soul-api 等
|
||||
# 若用宝塔「Node 项目」管理,请在面板里对该站点点击「重启」
|
||||
```
|
||||
|
||||
**方式三:SSH**(当连接可用时)
|
||||
|
||||
```bash
|
||||
ssh -p 22022 -i "服务器管理/Steam/id_ed25519" root@43.139.27.93 "nginx -s reload; pm2 restart soul"
|
||||
```
|
||||
|
||||
修复后刷新 soul.quwanzhi.com/admin 查看是否恢复。
|
||||
|
||||
### 6.7 腾讯云控制台可做
|
||||
|
||||
- **升级带宽**:云服务器 → 选择实例 ins-aw0tnqjo → 更多 → 网络/带宽 → 调整带宽。
|
||||
- **流量/带宽告警**:云监控 → 告警策略,对「公网出带宽」设阈值(如 4 Mbps)便于提前发现打满。
|
||||
@@ -163,3 +234,21 @@ limit_rate 500k; # 单连接限速 500KB/s,可按需改
|
||||
---
|
||||
|
||||
**下一步**:在 kr宝塔 面板终端执行「六、6.1」诊断;若连接数或单 IP 异常,按 6.2/6.3 限流;长期可升级带宽或设告警。
|
||||
|
||||
---
|
||||
|
||||
## 八、高负载 / CPU 满 / 磁盘满 · 已执行处理(卡若AI 默认自动)
|
||||
|
||||
当负载 100%、CPU 99%、磁盘 89% 时,已通过 SSH 自动执行:
|
||||
|
||||
1. **结束高 CPU 进程**:多次结束占用约 35~39% CPU 的 `npm start`(会被宝塔 Node 项目自动拉起,需在面板中停用或重启对应项目)。
|
||||
2. **清理磁盘**:删除 `/www/wwwlogs` 下 7 天前 `.log`;截断大于 50M 的网站日志;清理 `/tmp` 7 天前文件;删除 `/var/log` 7 天前 `.log`;截断 `/var/log/oneav/oneav.log`。网站日志由约 2G 降至约 258M,磁盘由约 89% 降至约 87%(约 10G 可用)。
|
||||
3. **负载与 CPU 来源**:当前负载主要来自多个 `next-server`(Node 站点)及反复被拉起的 `npm start`。要持续降压需在宝塔「网站」→「Node 项目」中停用或合并非必要项目,或升级为 4 核。
|
||||
|
||||
**一键再执行(在服务器终端)**:
|
||||
```bash
|
||||
find /www/wwwlogs -name '*.log' -mtime +7 -type f -delete
|
||||
find /www/wwwlogs -name '*.log' -type f -size +50M -exec truncate -s 0 {} \;
|
||||
find /tmp -type f -mtime +7 -delete
|
||||
find /var/log -name '*.log' -mtime +7 -type f -delete
|
||||
```
|
||||
|
||||
97
01_卡资(金)/金仓_存储备份/服务器管理/scripts/kr宝塔_宝塔API_修复502.py
Normal file
97
01_卡资(金)/金仓_存储备份/服务器管理/scripts/kr宝塔_宝塔API_修复502.py
Normal file
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
kr宝塔 43.139.27.93:通过宝塔 API 修复 502(重启 Nginx、重启 soul 相关 Node 项目)。
|
||||
使用:python3 kr宝塔_宝塔API_修复502.py
|
||||
需将本机 IP 加入 kr宝塔 面板「设置」→「API 接口」白名单。
|
||||
"""
|
||||
import time
|
||||
import hashlib
|
||||
import json
|
||||
|
||||
try:
|
||||
import requests
|
||||
import urllib3
|
||||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||
USE_REQUESTS = True
|
||||
except ImportError:
|
||||
import urllib.request
|
||||
import urllib.parse
|
||||
import ssl
|
||||
ssl._create_default_https_context = ssl._create_unverified_context
|
||||
USE_REQUESTS = False
|
||||
|
||||
PANEL_URL = "https://43.139.27.93:9988"
|
||||
API_KEY = "qcWubCdlfFjS2b2DMT1lzPFaDfmv1cBT"
|
||||
|
||||
def sign():
|
||||
t = int(time.time())
|
||||
s = str(t) + hashlib.md5(API_KEY.encode()).hexdigest()
|
||||
return {"request_time": t, "request_token": hashlib.md5(s.encode()).hexdigest()}
|
||||
|
||||
def post(endpoint, data=None):
|
||||
url = PANEL_URL + endpoint
|
||||
payload = sign()
|
||||
if data:
|
||||
payload.update(data)
|
||||
if USE_REQUESTS:
|
||||
r = requests.post(url, data=payload, timeout=20, verify=False)
|
||||
return r.json()
|
||||
req = urllib.request.Request(url, data=urllib.parse.urlencode(payload).encode())
|
||||
with urllib.request.urlopen(req, timeout=20) as resp:
|
||||
return json.loads(resp.read().decode())
|
||||
|
||||
def main():
|
||||
print("=" * 56)
|
||||
print(" kr宝塔 · 宝塔 API 修复 502(soul.quwanzhi.com 等)")
|
||||
print("=" * 56)
|
||||
|
||||
# 1. 重启 Nginx
|
||||
print("\n【1】重启 Nginx...")
|
||||
try:
|
||||
r = post("/system?action=ServiceAdmin", {"name": "nginx", "type": "restart"})
|
||||
if r.get("status") is True or (isinstance(r.get("msg"), str) and "成功" in r.get("msg", "")):
|
||||
print(" Nginx 重启成功。")
|
||||
else:
|
||||
print(" 响应:", r)
|
||||
except Exception as e:
|
||||
if "IP" in str(e) or "校验" in str(e) or "403" in str(e):
|
||||
print(" ❌ API 白名单未通过。请到 kr宝塔 面板「设置」→「API 接口」将本机公网 IP 加入白名单后重试。")
|
||||
return 1
|
||||
print(" 请求异常:", e)
|
||||
return 1
|
||||
|
||||
# 2. 获取 Node 项目列表并重启 soul 相关
|
||||
print("\n【2】查找并重启 soul 相关 Node 项目...")
|
||||
try:
|
||||
r = post("/project/nodejs/get_project_list", {})
|
||||
if r.get("status") is not True:
|
||||
print(" 获取项目列表失败或接口不可用:", r.get("msg", r))
|
||||
else:
|
||||
data = r.get("data") or r.get("list") or []
|
||||
if not isinstance(data, list):
|
||||
data = []
|
||||
restarted = []
|
||||
for p in data:
|
||||
name = (p.get("name") or p.get("project_name") or "").lower()
|
||||
if "soul" in name or "souladmin" in name or "soul-admin" in name:
|
||||
proj_name = p.get("name") or p.get("project_name")
|
||||
try:
|
||||
post("/project/nodejs/restart_project", {"project_name": proj_name})
|
||||
restarted.append(proj_name)
|
||||
except Exception as e2:
|
||||
print(" 重启 %s 失败: %s" % (proj_name, e2))
|
||||
if restarted:
|
||||
print(" 已重启:", ", ".join(restarted))
|
||||
else:
|
||||
print(" 未找到名称含 soul 的 Node 项目,或列表为空。若 502 仍存在,请在面板「Node 项目」中手动重启 soul 相关项目。")
|
||||
except Exception as e:
|
||||
print(" 请求异常:", e)
|
||||
|
||||
print("\n" + "=" * 56)
|
||||
print("请刷新 soul.quwanzhi.com/admin 查看是否恢复。若仍 502,请到宝塔面板检查该站点「反向代理」上游是否运行,或重启对应 Node/PM2 项目。")
|
||||
print("=" * 56)
|
||||
return 0
|
||||
|
||||
if __name__ == "__main__":
|
||||
exit(main())
|
||||
104
01_卡资(金)/金仓_存储备份/服务器管理/scripts/kr宝塔_带宽占用排查.sh
Normal file
104
01_卡资(金)/金仓_存储备份/服务器管理/scripts/kr宝塔_带宽占用排查.sh
Normal file
@@ -0,0 +1,104 @@
|
||||
#!/bin/bash
|
||||
# kr宝塔 43.139.27.93:列出可能占满带宽的 程序/端口/网站 及 连接数占比(近似带宽占比)
|
||||
# 在服务器上执行:bash kr宝塔_带宽占用排查.sh 或 宝塔面板 → 终端 粘贴运行
|
||||
|
||||
set -e
|
||||
echo "=============================================================="
|
||||
echo " kr宝塔 · 带宽占用排查(程序 / 端口 / 网站 · 连接数占比)"
|
||||
echo "=============================================================="
|
||||
|
||||
# 1) 监听中的端口与进程
|
||||
echo ""
|
||||
echo "【1】监听端口与对应进程(可能对外提供服务的程序)"
|
||||
echo "--------------------------------------------------------------"
|
||||
ss -tlnp 2>/dev/null | awk 'NR==1 || /LISTEN/ {print}' | while read line; do
|
||||
if echo "$line" | grep -q "LISTEN"; then
|
||||
port=$(echo "$line" | awk '{print $4}' | rev | cut -d: -f1 | rev)
|
||||
pid=$(echo "$line" | grep -oE 'pid=[0-9]+' 2>/dev/null | sed 's/pid=//' | head -1)
|
||||
if [ -n "$pid" ] && [ "$pid" -eq "$pid" ] 2>/dev/null; then
|
||||
exe=$(readlink -f /proc/$pid/exe 2>/dev/null || ps -p $pid -o comm= 2>/dev/null)
|
||||
echo " 端口 $port → PID $pid → $exe"
|
||||
else
|
||||
echo " $line"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# 2) ESTABLISHED 按本地端口统计 → 连接数占比
|
||||
echo ""
|
||||
echo "【2】当前连接数按「本地端口」统计(占比 ≈ 该服务占用带宽的大致比例)"
|
||||
echo "--------------------------------------------------------------"
|
||||
total=$(ss -antn state established 2>/dev/null | wc -l)
|
||||
[ "$total" -eq 0 ] && total=1
|
||||
ss -antn state established 2>/dev/null | awk '{print $4}' | sed 's/.*://' | sort | uniq -c | sort -rn | head -25 | while read cnt port; do
|
||||
pct=$((cnt * 100 / total))
|
||||
# 解析端口对应服务(常见)
|
||||
name=""
|
||||
case "$port" in
|
||||
80|443) name="(Nginx HTTP/HTTPS)" ;;
|
||||
9988) name="(宝塔面板)" ;;
|
||||
22022) name="(SSH)" ;;
|
||||
8000) name="(常见 Node/网关)" ;;
|
||||
3000) name="(常见 Node)" ;;
|
||||
3306) name="(MySQL)" ;;
|
||||
esac
|
||||
echo " 端口 $port $name → 连接数 $cnt → 占比 ${pct}%"
|
||||
done
|
||||
echo " 总连接数: $total"
|
||||
|
||||
# 3) ESTABLISHED 按进程(PID)统计 → 程序维度占比
|
||||
echo ""
|
||||
echo "【3】当前连接数按「进程」统计(程序维度 ≈ 带宽占比)"
|
||||
echo "--------------------------------------------------------------"
|
||||
# 从 ss -antp 提取 pid(格式因系统而异)
|
||||
ss -antp state established 2>/dev/null | grep -oE 'pid=[0-9]+' | sed 's/pid=//' | sort | uniq -c | sort -rn | head -20 | while read cnt pid; do
|
||||
[ -z "$pid" ] && continue
|
||||
pct=$((cnt * 100 / total))
|
||||
exe=$(readlink -f /proc/$pid/exe 2>/dev/null || ps -p $pid -o comm= 2>/dev/null)
|
||||
cmd=$(ps -p $pid -o args= 2>/dev/null | cut -c1-60)
|
||||
echo " PID $pid 连接数 $cnt (${pct}%) → $exe"
|
||||
echo " 命令: $cmd"
|
||||
done
|
||||
|
||||
# 4) Nginx 站点与端口(端口 → 网站)
|
||||
echo ""
|
||||
echo "【4】Nginx 站点(端口 → 网站/域名)"
|
||||
echo "--------------------------------------------------------------"
|
||||
if [ -d /www/server/panel/vhost/nginx ]; then
|
||||
for f in /www/server/panel/vhost/nginx/*.conf; do
|
||||
[ -f "$f" ] || continue
|
||||
name=$(grep -m1 'server_name' "$f" 2>/dev/null | sed 's/.*server_name\s*//;s/;.*//;s/\s.*//')
|
||||
listen=$(grep -m1 'listen' "$f" 2>/dev/null | sed 's/.*listen\s*//;s/\s.*//;s/;.*//')
|
||||
root=$(grep -m1 'root ' "$f" 2>/dev/null | sed 's/.*root\s*//;s/;.*//')
|
||||
[ -z "$name" ] && name="(未配置 server_name)"
|
||||
echo " $name → listen $listen root $root"
|
||||
done
|
||||
else
|
||||
echo " (未找到 /www/server/panel/vhost/nginx)"
|
||||
fi
|
||||
|
||||
# 5) PM2 / Node 进程(常见占带宽)
|
||||
echo ""
|
||||
echo "【5】Node/PM2 进程(常见占带宽应用)"
|
||||
echo "--------------------------------------------------------------"
|
||||
if command -v pm2 >/dev/null 2>&1; then
|
||||
pm2 list 2>/dev/null || true
|
||||
else
|
||||
ps aux | grep -E 'node|next|nuxt' | grep -v grep || echo " (未发现 pm2/node 或未在 PATH)"
|
||||
fi
|
||||
|
||||
# 6) 若安装 nethogs,可采样几秒得到实时带宽占比
|
||||
echo ""
|
||||
echo "【6】实时带宽占比(需安装 nethogs,采样 5 秒)"
|
||||
echo "--------------------------------------------------------------"
|
||||
if command -v nethogs >/dev/null 2>&1; then
|
||||
echo " 运行: nethogs -t -c 5 (5 秒采样,需 root)"
|
||||
(timeout 6 nethogs -t -c 5 2>/dev/null || nethogs -t -d 1 -c 5 2>/dev/null) || echo " (请手动执行: nethogs -t)"
|
||||
else
|
||||
echo " 未安装 nethogs。安装: yum install nethogs 或 apt install nethogs,可得到各进程实时带宽占比。"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=============================================================="
|
||||
echo "说明:连接数占比可近似看作该程序/端口占用带宽的比例;精确带宽请用 nethogs 或宝塔「监控」"
|
||||
echo "=============================================================="
|
||||
Reference in New Issue
Block a user