【Linux】服务器分析
- 【一】基础概念
- [【二】16C 32G 机器理论性能上限](#【二】16C 32G 机器理论性能上限)
-
- [【1】CPU 上限](#【1】CPU 上限)
- [【2】内存上限(总 32G)](#【2】内存上限(总 32G))
- [【3】IO / 网络隐性上限](#【3】IO / 网络隐性上限)
- [【三】如何充分利用 16C32G 资源](#【三】如何充分利用 16C32G 资源)
-
- 【1】核心原则
- [【2】Java/DataX 类应用(IO 密集型,DataX 同步服务)](#【2】Java/DataX 类应用(IO 密集型,DataX 同步服务))
-
- [(1)JVM 内存分配标准(32G 机器)](#(1)JVM 内存分配标准(32G 机器))
- [(2)线程池配置(DataX 核心 channel 通道)](#(2)线程池配置(DataX 核心 channel 通道))
- [【3】Nginx(轻量网关,转发 DataX 请求)](#【3】Nginx(轻量网关,转发 DataX 请求))
- [【4】系统内核参数调优(最大化网络 / 文件性能)](#【4】系统内核参数调优(最大化网络 / 文件性能))
- 【5】负载均衡拆分资源(集群场景)
- [【四】看服务器 CPU、内存、磁盘、线程资源使用](#【四】看服务器 CPU、内存、磁盘、线程资源使用)
-
- 【1】top(实时整机监控)
- 【2】内存专项查看
- [【3】CPU 硬件规格查询(确认 16C 真实配置)](#【3】CPU 硬件规格查询(确认 16C 真实配置))
- [【4】线程 / 进程资源排查(定位哪个线程占满 CPU)](#【4】线程 / 进程资源排查(定位哪个线程占满 CPU))
- [【5】磁盘 IO 负载(DataX 同步重点监控)](#【5】磁盘 IO 负载(DataX 同步重点监控))
- [【6】网络负载(StreamLoad 大量 HTTP 请求)](#【6】网络负载(StreamLoad 大量 HTTP 请求))
- [【五】资源利用率判定标准(16C32G 运维阈值)](#【五】资源利用率判定标准(16C32G 运维阈值))
【一】基础概念
【1】CPU 核心(16C)
当前机器逻辑 CPU 总数 = 16 个,操作系统调度最小单位是逻辑 CPU。
单核同一时间只能执行 1 个线程;
16C 理论最大并发线程调度上限:同时跑满 16 个活跃线程;
CPU 使用率 100% = 16 个核心全部打满,无空闲算力。
【2】进程
独立程序实例,拥有独立内存空间、文件句柄、PID;
例:一个 DataX 服务、一个 Nginx、一个 Java 应用,各是独立进程。
进程之间内存隔离,不能直接共享堆内存。
【3】线程
进程内的执行单元,共享进程堆内存、文件句柄;
Java/DataX 都是多线程模型,一个进程可以开几十~几百个线程;
操作系统 CPU 调度只看线程,不看进程。
【二】16C 32G 机器理论性能上限
【1】CPU 上限
满载阈值:CPU 整体使用率持续 ≥85% 属于高负载;持续 100% 代表瓶颈;
线程安全上限:业务计算线程总和建议 ≤12至14(预留 2至4 核给系统、网络 IO、内核线程);
超载危害:线程数远超 16 → 操作系统频繁上下文切换,CPU 软中断飙升,吞吐量反而下降。
【2】内存上限(总 32G)
(1)系统内存分三块,不可全部给业务:
OS 系统预留:4~6G(内核、缓冲区、TCP 缓存、PageCache);
业务应用可用内存:24~28G;
Swap 交换分区:尽量关闭,物理内存不足会疯狂刷磁盘,性能暴跌。
(2)内存水位划分:
安全水位:总内存占用 ≤70%(≤22G);
高负载水位:70%~85%;
危险水位:>85%,容易触发 OOM killer 杀死进程。
【3】IO / 网络隐性上限
文件句柄上限:系统默认 1024,多线程同步场景必须调至 65535;
TCP 连接上限:高并发服务需调大somaxconn、epoll参数;
磁盘 IO:大量读写场景(如 DataX 同步),磁盘会先于 CPU 成为瓶颈。
【三】如何充分利用 16C32G 资源
【1】核心原则
资源隔离:单进程内存不超限,多进程 CPU 线程总和不超过安全核数;
预留缓冲:系统永远预留 2~4 核、4G 内存,不打满硬件;
避免资源争抢:同一机器不要混跑高 CPU + 高 IO 重负载服务;
线程池匹配 CPU 核数:计算密集型线程≈CPU 核数,IO 密集型可适度放大。
【2】Java/DataX 类应用(IO 密集型,DataX 同步服务)
(1)JVM 内存分配标准(32G 机器)
bash
-Xms20G -Xmx20G
固定堆 20G,预留 12G 给系统 PageCache、内核、其他轻量进程;
禁止设置-Xmx28G,无系统缓冲会导致磁盘频繁 IO 卡顿。
(2)线程池配置(DataX 核心 channel 通道)
DataX 每个 channel = 1 读线程 + 1 写线程,属于 IO 密集型(网络读写 Doris/MySQL):
(1)单台机器安全最大并发 channel:10~12;
(2)不要开到 16,预留核给网络、磁盘 IO、GC 线程;
(3)3 台 16C 机器集群总并发上限:30~36 通道,均衡分流不单点压满。
【3】Nginx(轻量网关,转发 DataX 请求)
CPU 消耗极低,可同机部署:
worker 进程数设置等于 CPU 核心数:worker_processes 16;
worker 连接上限调大:worker_connections 65535;
内存占用仅几百 MB,几乎不抢占业务资源。
【4】系统内核参数调优(最大化网络 / 文件性能)
bash
# 1. 文件句柄放开
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
# 2. TCP网络调优,高并发StreamLoad请求专用
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.core.netdev_max_backlog=50000
# 3. 关闭swap,防止内存不足卡顿
sysctl -w vm.swappiness=0
【5】负载均衡拆分资源(集群场景)
你 3 台 16C DataX 服务器:
Nginx 统一入口,请求轮询分发,每台机器负载均衡;
避免单台机器承载 80% 同步任务,出现单点 CPU100%;
调度平台分批下发同步任务,瞬时并发不超过单台 12 通道上限。
【四】看服务器 CPU、内存、磁盘、线程资源使用
【1】top(实时整机监控)
bash
top
快捷键:
1:展开 16 颗逻辑 CPU,看每核占用;
M:按内存占用排序进程;
P:按 CPU 占用排序;
H:显示进程内所有线程;
q 退出。
关键指标解读:
Cpu(s):整机平均 CPU 使用率;
%Cpu0~%Cpu15:每颗核心单独负载;
Mem total/used/avail:总内存、已用、可用内存(avail 是真实剩余可用)。
【2】内存专项查看
bash
# 人性化单位GB展示
free -h
字段重点看 available(真实剩余内存)。
bash
# 底层内存明细,缓存、缓冲区
cat /proc/meminfo
【3】CPU 硬件规格查询(确认 16C 真实配置)
bash
# 结构化输出CPU信息
lscpu
# 统计逻辑CPU总数(输出16)
grep processor /proc/cpuinfo | wc -l
# 查看物理CPU、核心、超线程
cat /proc/cpuinfo
【4】线程 / 进程资源排查(定位哪个线程占满 CPU)
步骤 1:top -H 查看进程内线程,找到占用 CPU 高的线程 TID。
bash
top -H -p 进程PID
步骤 2:Java 项目打印线程栈(DataX/Java 服务)
bash
# 打印进程所有线程堆栈,定位死循环、阻塞线程
jstack 进程PID > thread.log
统计进程线程总数
bash
# 替换PID
ps -T -p 12345 | wc -l
【5】磁盘 IO 负载(DataX 同步重点监控)
bash
# 实时磁盘IO,每秒刷新
iostat -x 1
重点看 %util,接近 100% 代表磁盘 IO 瓶颈。
【6】网络负载(StreamLoad 大量 HTTP 请求)
bash
# 实时网卡流量
sar -n DEV 1
# 连接数统计
netstat -ant | wc -l
ss -s
【五】资源利用率判定标准(16C32G 运维阈值)
(1)CPU
健康:平均负载 <12,单核心无长期 100%;
告警:平均负载 > 14,持续 5 分钟;
瓶颈:全 16 核打满,任务排队、同步速度下降。
(2)内存
健康:available >10G;
告警:available <6G;
危险:available <3G,触发 swap/OOM。
(3)磁盘 IO
告警:% util 持续 > 80%;
瓶颈:% util=100%,写入延迟暴涨,DataX 同步卡顿。