Featured image of post CentOS 7 服务器项目盘点与端口管理

CentOS 7 服务器项目盘点与端口管理

盘点 CentOS 7 服务器上运行的 11 个项目,整理端口对照表,分析资源占用并给出优化建议。

字数: 2942

CentOS 7 服务器项目盘点与端口管理

一台服务器上跑了 11 个项目,端口、进程、资源怎么理清楚?这篇给你完整答案。

背景

之前清理完磁盘和木马后,顺手把服务器上正在运行的项目盘了一遍。发现不知不觉已经部署了 11 个项目,端口从 5002 到 42120 都有,还有 frp/nps 内网穿透占了一堆端口。

本文整理如何查看正在运行的项目、端口对照表、资源占用分析、以及优化建议。


一、查看正在运行的项目

1.1 看 systemd 服务

systemctl list-units --type=service --state=running

输出会列出所有 active 的服务。过滤掉系统服务:

systemctl list-units --type=service --state=running | grep -vE "systemd|dbus|network|ssh|chrony|crond|firewalld|auditd|tuned|postfix|rsyslog|jcloud|jcs|jdog|ifritd|polkit|irqbalance|lvm|getty|rpc|nfs|gssproxy|sssd|NetworkManager|abrt|microcode|mcelog"

1.2 看监听端口

/usr/sbin/ss -tlnp

输出显示所有监听端口和对应进程,是最直接的"项目地图"。

1.3 看进程详情

# 按内存排序
ps aux --sort=-%mem | head -20

# 看 gunicorn 项目路径
ps aux | grep gunicorn | grep -v grep

gunicorn 进程的完整命令里包含项目路径和端口,一眼就能对上。

1.4 看 Docker 容器

docker ps

二、端口对照表

2.1 自己的项目

端口项目路径对外
5002music_player/usr/local/music_player✅
5004software_library/usr/local/software_library🔒 仅本机
5006giftbook/usr/local/giftbook✅
5008shared_diary/usr/local/shared_diary✅
5012music-uniapp 后端/usr/local/music-uniapp/backend✅
5014registration/usr/local/registration_system✅
8000iris-app/root/iris-app✅
8501webpage-summaryStreamlit✅
8080filebrowser文件管理✅
8082global-radioDocker 容器✅
42120daoliyu-music/opt/daoliyu-music✅

2.2 基础环境

端口服务
80 / 443Nginx
3306 / 33060MySQL
6379Redis(仅本机)
9000PHP-FPM(仅本机)
22SSH(已改端口)

2.3 内网穿透

端口服务
7000、7500、5555、3663、3664、5680、5005frps
5000、8024、8443、4000、5677-5681、8081、3662、9669nps

三、资源占用分析

3.1 内存占用

项目worker 数累计内存
iris-app4~308M
mysqld-~323M
giftbook4~192M
shared_diary4~120M
music_player4~60M
registration4~36M
music-uniapp4~32M
software_library4~12M

结论:

  1. iris-app 最吃内存:机器学习应用,加载模型占 ~308M
  2. MySQL 是单进程大头:~323M
  3. 其余项目都很轻

3.2 CPU 占用

所有进程 CPU 都低于 1.3%,完全不是瓶颈。


四、优化建议

4.1 内存优化

优化项做法收益
不常用项目减 worker-w 4 改 -w 2省内存
iris-app 按需启动不用时 systemctl stop iris-app省 ~300M
MySQL 调优调小 innodb_buffer_pool_size省内存

4.2 安全优化

端口收口:很多项目绑定 0.0.0.0,外部可直接访问。建议:

  1. 云服务器安全组:只放行 80、443、96,以及 frp/nps 用到的端口
  2. gunicorn 绑本机:改成 -b 127.0.0.1:端口,由 Nginx 反代
  3. firewalld:在系统层面限制端口访问

4.3 管理脚本

把项目状态检查做成脚本,随时能看:

cat > /root/projects.sh << 'EOF'
#!/bin/
echo "===== 我的项目状态 ====="
for s in music-player music-uniapp daoliyu-music giftbook shared-diary software_library webpage-summary iris-app registration filebrowser frps Nps; do
  printf "%-20s %s\n" "$s" "$(systemctl is-active $s 2>/dev/null)"
done
echo ""
echo "===== 监听端口 ====="
/usr/sbin/ss -tlnp | grep -E "5002|5004|5006|5008|5012|5014|8000|8501|8080|8082|42120"
EOF
chmod +x /root/projects.sh

以后随时跑:

/root/projects.sh

五、项目清单汇总

#项目端口技术栈systemd 服务名
1music_player5002Flask + gunicornmusic-player
2software_library5004Flask + gunicornsoftware_library
3giftbook5006Flask + gunicorngiftbook
4shared_diary5008Flask + gunicornshared-diary
5music-uniapp5012FastAPI + uvicornmusic-uniapp
6registration5014Flask + gunicornregistration
7iris-app8000Flask + gunicorniris-app
8webpage-summary8501Streamlitwebpage-summary
9filebrowser8080文件管理filebrowser
10daoliyu-music42120音乐服务daoliyu-music
11global-radio8082Docker 容器-

结语

一台服务器跑了 11 个项目,端口、进程、资源理清楚后,管理起来就轻松了。

几个关键点:

  • ss -tlnp 是查看端口映射最快的方法
  • ps aux | grep gunicorn 能直接看到项目路径和端口
  • 内存大头往往是 MySQL 和机器学习类应用
  • 对外端口要收口,安全组 + Nginx 反代是最佳实践

定期盘点,及时优化,服务器才能稳定运行。


CentOS 7 内存优化实战:从 Swap 告急到从容运行

2G 内存的服务器跑 11 个项目,Swap 一度用到 973M/1G。记录一次完整的内存排查与优化过程。

背景

之前清理完磁盘和木马后,顺手检查了一下内存,发现一个更隐蔽的问题:

              total        used        free      shared  buff/cache   available
Mem:           2.0G        1.0G        254M         55M        689M        736M
Swap:          1.0G        983M         41M

Swap 用了 983M,只剩 41M。 这意味着系统长期内存不足,已经把大量数据换出到磁盘。Swap 快满时,服务器会变得很卡,甚至触发 OOM(杀进程)。

本文记录如何定位内存问题、分析 Swap 占用、以及分步优化。


一、发现问题:Swap 告急

1.1 看内存总览

free -h

输出:

              total        used        free      shared  buff/cache   available
Mem:           2.0G        1.0G        254M         55M        689M        736M
Swap:          1.0G        983M         41M
  • 物理内存:2G,用了 1G,还有 736M 可用 —— 看起来还行
  • Swap:1G 用了 983M —— 这才是真正的问题

1.2 为什么 Swap 满了要警惕

  1. Swap 是磁盘,比内存慢几个数量级,用多了系统会卡
  2. Swap 快满时,新内存分配会失败,触发 OOM 杀进程
  3. 说明物理内存长期不够用

二、定位:谁在吃 Swap

2.1 安装 smem

yum install -y smem

2.2 按 Swap 排序

smem -t -k -s swap | tail -20

输出(节选):

进程Swap项目
mysqld180.1MMySQL
shared_diary × 454.9+56.1+64.1+64.3 = 239.4M共享日记
registration × 429.1+29.4+29.5+37.5 = 125.5M注册系统
software_library × 429.9+30.0+30.0+30.1 = 120M软件库
music-uniapp × 423.1+23.1+30.0+30.1 = 106.3M音乐后端
giftbook × 511.2+17.8+18.2+18.5+18.6 = 84.3M礼物书
music_player × 440.4M音乐播放器
php-fpm × 539.4MPHP

Swap 占用约 983M,其中:

  • shared_diary 系列:239M ← 最大
  • MySQL:180M
  • registration:125M
  • software_library:120M
  • music-uniapp:106M

2.3 核心问题

每个项目都用了 -w 4(4 个 worker),但很多项目访问量并不大。

4 个 worker 意味着 4 份内存,每个 worker 即使空闲也要占几十 M。2G 内存的机器跑 11 个项目 × 4 worker + MySQL + Redis + Nginx + PHP,确实太挤了。


三、处理:分步优化

3.1 第一步:停掉不常用的项目

# 停掉机器学习应用(最吃内存,~300M)
systemctl stop iris-app
systemctl disable iris-app

# 停掉网页摘要(Streamlit,~23M)
systemctl stop webpage-summary
systemctl disable webpage-summary

注意:停服务后 Swap 不会自动降,因为 Swap 里的数据不会因为进程停止就换回物理内存,需要 swapoff/swapon 或重启才能释放。

3.2 第二步:加 Swap(立刻缓解)

发现原来的 Swap 是个文件,放在 /www/swap,只有 1G:

swapon --show
# NAME      TYPE SIZE   USED PRIO
# /www/swap file   1G 973.8M   -2

再加 2G:

fallocate -l 2G /swapfile2
chmod 600 /swapfile2
mkswap /swapfile2
swapon /swapfile2

# 开机自动挂载
echo '/swapfile2 swap swap defaults 0 0' >> /etc/fstab

# 确认
free -h
swapon --show

结果:

              total        used        free      shared  buff/cache   available
Mem:           2.0G        1.0G        127M         54M        828M        748M
Swap:          3.0G        977M        2.0G     ← Swap 总量变 3G,可用 2G

Swap 危机暂时解除。

3.3 第三步:调小 worker 数(治本)

这是减少内存占用的根本办法。先看各项目配置:

for s in shared-diary registration software_library music-uniapp giftbook music-player; do
  echo "=== $s ==="
  systemctl cat $s 2>/dev/null | grep -E "ExecStart"
done

或一次性列出所有 -w 4 的服务:

grep -r "w 4" /etc/systemd/system/*.service 2>/dev/null

建议调整:

项目当前 worker建议省的 Swap
shared-diary42~120M
registration41~94M
software_library41~90M
music-uniapp42~53M
giftbook42~42M
music-player42~20M

合计可省约 400M+ Swap。

修改方法(以 shared-diary 为例):

# 1. 编辑服务文件
vi /etc/systemd/system/shared-diary.service

# 2. 把 ExecStart 里的 -w 4 改成 -w 2

# 3. 重载并重启
systemctl daemon-reload
systemctl restart shared-diary

# 4. 确认
systemctl cat shared-diary | grep ExecStart

3.4 第四步:MySQL 调优(进阶)

MySQL 占了 180M Swap + 311M RSS。如果数据量不大,可以调小 innodb_buffer_pool_size:

vi /etc/my.cnf
# [mysqld] 下加或改:
# innodb_buffer_pool_size = 128M
systemctl restart mysqld

3.5 第五步:重启释放 Swap(可选)

调完 worker、加完 Swap 后,如果想让 Swap 重新分配:

# ⚠️ 危险操作!确认物理内存够用再执行
swapoff -a && swapon -a

注意:2G 物理内存 + 973M Swap 的情况下,直接 swapoff 会把 973M 数据读回内存,极可能触发 OOM 杀进程。建议在加完新 Swap、且业务低峰期再操作,或者干脆重启机器。


四、经验总结

内存排查要点

命令用途
free -h看内存和 Swap 总览
smem -t -k -s swap按 Swap 占用排序各进程
swapon --show看 Swap 文件/分区详情
ps aux --sort=-%mem按内存排序进程

Swap 优化要点

  1. Swap 快满要警惕:会导致系统卡顿、OOM
  2. 停进程 ≠ 释放 Swap:Swap 数据不会自动换回内存
  3. 加 Swap 是治标:缓解压力,但不解决根本问题
  4. 调小 worker 是治本:减少内存占用

gunicorn 项目优化

  • worker 数不是越多越好:-w 4 对小内存机器偏多
  • 按访问量调整:高频项目保留 4,低频项目降到 1~2
  • 公式参考:worker = 2 × CPU核数 + 1,但内存有限时要酌情减少

安全建议

  • 2G 内存的机器,别跑太多重型应用
  • 机器学习类应用(如 iris-app)按需启动,不用就停
  • 定期用 smem 检查内存占用,早发现早优化

五、最终状态

项目优化前优化后
物理内存可用736M748M
Swap 总量1G3G
Swap 可用41M2.0G
iris-app运行中(~300M)已停
webpage-summary运行中(~23M)已停

从 Swap 告急到从容运行,关键三步:

  1. 停掉不常用的重型应用
  2. 加 Swap 缓解压力
  3. 调小 worker 数治本

结语

内存优化和磁盘清理一样,先定位,再处理,分步执行。

free -h 看总览,smem 找大户,systemctl 停服务,swapon 加 Swap —— 一套流程下来,2G 内存的机器也能稳定跑多个项目。

关键是不要贪多:worker 数按需配置,不常用的应用该停就停。服务器稳定,比什么都重要。

发布了 13 篇文章 | 共 43.6K 字 | 总访客数: Loading | 总访问量: Loading
Hugo theme Stack designed by Jimmy | 黔ICP备2025049100号-1