教程介绍:
网站VPS服务器使用时, 难免会遇到服务器的负载占用100%, 内存占用过高, 时间久还会引起后台卡顿,数据库MySQL关闭和服务器死机问题,或者遇到服务器后台某些进程偷跑流量,然而有些服务器提交工单后又不处理 怎么办? 我们可以查看当前运行的进程, 查找异常进程处理并解决运行问题, 也可以添加些用户访问限制解决访问过高。
教程以Ubuntu系统, 宝塔面板, ssh应用termius为例, 在服务器运行状态下, 用ssh工具连接到服务器, 再执行下面的命令用于显示当前运行的进程,并按照内存使用量从高到低排序。
[bash]ps aux --sort=-rss[/bash]
在这个例子中:
- `PID`列显示的是运行进程id,例如`5864`。
- `CPU`列显示的是cpu占用百分比,例如`0.6`%。
- `%MEM`列显示的是该进程使用的真实物理内存的百分比,例如`4.2`%。
- `VSZ`列显示的是虚拟内存大小,例如`105900` KB。
- `RSS`列显示的是实际驻留内存大小,例如`41700` KB。
通过这些信息,你可以更好地理解每个进程的内存使用情况,从而进行相应的优化或排查问题。
显示进程后, 如果界面不能往上拉的, 可以关闭下图中的按钮(如果进程路径显示不全可以放大界面,重新执行命令查询)
查找%MEM或者RSS占用高的, 使用 `kill` 命令来终止进程id。
[bash]kill 5864
kill 12345
kill 67890[/bash]
01, 例如一个one.php文件脚本进程, 占用的PID进程比较多的时, 我们可以用下面命令查看全部的进程
[bash]ps aux | grep one.php[/bash]
我们可以用 kill PID 命令关闭进程, 也可以shell自动化脚本一键关闭,
[shell]#!/bin/bash
# 获取所有匹配的进程ID并终止它们
for pid in $(ps aux | grep '[o]ne.php' | awk '{print $2}')
do
kill $pid
done[/shell]
复制代码, 在宝塔面板的计划任务→添加任务→自定义任务名称, 执行周期, 粘贴代码到脚本内容文本框中, 然后点击执行。
也可以将上述脚本保存为 `kill_one_php.sh`,然后上传到/www/目录中赋予执行权限并运行:
[bash]chmod +x /www/kill_one_php.sh
./kill_one_php.sh[/bash]
这个脚本会找到所有包含 `one.php` 的进程并逐一终止它们。
如果你希望从源头上防止PHP脚本后台运行,可以在PHP脚本中添加代码来检测是否在后台运行,并立即退出。
[php]<?php
if (posix_getsid(posix_getpid()) != posix_getpid()) {
exit("This script cannot run in the background.\n");
}
// 你的PHP代码
?>[/php]
02, 假设你要查找的是与 `/www/server/panel` 路径相关的所有进程,你可以按照以下步骤操作:
[bash]ps aux | grep "/www/server/panel[/bash]
列出所有当前路径进程, 为了方便起见,可以脚本来自动化这个停止过程:
[shell]#!/bin/bash
# 查找与特定路径相关的进程
processes=$(ps aux | grep "/www/server/panel" | grep -v grep)
# 检查是否找到任何进程
if [ -z "$processes" ]; then
echo "没有找到相关进程。"
else
# 提取PID并停止进程
while read -r line; do
pid=$(echo $line | awk '{print $2}')
if [ -n "$pid" ]; then
echo "停止进程 $pid..."
kill $pid
# 如果需要强制停止,可以使用 kill -9 $pid
else
echo "无法提取PID。"
fi
done <<< "$processes"
fi[/shell]
复制后参考1的后续方法, 将上述脚本保存为 `stop_process.sh`,然后上传到/www/目录执行权限并运行:
[bash]
chmod +x /www/stop_process.sh
./stop_process.sh[/bash]
这个脚本会停止与指定路径相关的所有进程。
停止后就可以恢复服务器正常运行, 定时停止可以保持流畅运行, 也可以卸载一些不需要的进程, 减少内容占用, 如果遇到不懂的进程可以复制位置自行搜索判断。
如果访问用户过高的,可以设置一些限制!