Linux 服务器运维调优1

张开发
2026/4/12 1:33:12 15 分钟阅读

分享文章

Linux 服务器运维调优1
1、systemd服务常用命令#刷新配置 sudo systemctl daemon-reload #允许服务开机自动启动 sudo systemctl enable shop.service #禁止开机启动 sudo systemctl disable shop.service #启动 sudo systemctl start shop.service #停止 sudo systemctl stop shop.service #重启 sudo systemctl restart shop.service #查看状态 sudo systemctl status shop.service #查看所以有 dx开头服务 systemctl list-unit-files | grep -i dx #要停止所有 dxjb开头服务 sudo systemctl stop $(systemctl list-unit-files | grep -o ^dx[^ ]*.service)校验d x.service文件配置准确性#验证所有实例的启动日志是否正常 sudo journalctl -u shop.service -n 50 --no-pager # 查看 systemd 版本 systemctl --version # 验证配置文件语法 sudo systemd-analyze verify /etc/systemd/system/dx.service2、linux 服务器设置Swap# 1. 创建 6GiB 的 Swap 文件/swapfile sudo fallocate -l 6G /swapfile # 如果 fallocate 不支持用 dd慢一点但稳 # sudo dd if/dev/zero of/swapfile bs1G count6 # 2. 设置权限必须否则安全风险 sudo chmod 600 /swapfile # 3. 格式化为 Swap sudo mkswap /swapfile # 4. 启用 Swap sudo swapon /swapfile # 5. 永久生效加到 /etc/fstab echo /swapfile none swap sw 0 0 | sudo tee -a /etc/fstab # 6. 验证看 Swap 行是否有值 free -h3、linux运行过程中连接情况#服务器调优 # 1. 查看所有TCP连接的状态统计包括ESTABLISHED和所有non_established ss -ant | awk NR1 {s[$1]} END {for(k in s) print k\ts[k]} # 2. 查看前10个TIME_WAIT连接的目标IP/端口确认是来自SLB还是Redis还是OSS ss -ant state TIME-WAIT | head -n 10 # 3. 查看是否有CLOSE_WAIT连接1个以上就要立刻排查 ss -ant state CLOSE-WAIT # 4. 查看是否有SYN_SENT/SYN_RECV连接1个以上就要立刻排查 ss -ant state SYN-SENT ss -ant state SYN-RECV有CLOSE_WAIT连接1个以上立刻排查1) 立刻查看对应.NET8应用实例的启动日志找对应目标IP/端口的异常日志# 假设对应目标IP/端口是Redis的6379sudo journalctl -u dx-* --since 1 hour ago --no-pager | grep -i redis2)立刻查看对应.NET8应用实例的线程堆栈找应用逻辑卡死的地方# 用dotnet-dump查看对应.NET8应用实例的线程堆栈dotnet-dump collect --process-id 对应.NET8应用实例的PIDdotnet-dump analyze 生成的dump文件路径# 或者用dotnet-trace查看对应.NET8应用实例的线程堆栈生产环境推荐不用dump大文件dotnet-trace collect --process-id 对应.NET8应用实例的PID --duration 00:00:30 --output 生成的trace文件路径dotnet-trace convert 生成的trace文件路径 --format speedscope有SYN_SENT/SYN_RECV连接1个以上立刻排查根因锚定如果是SYN_SENT对应目标服务Redis/OSS挂了或者防火墙/安全组/白名单没放开如果是SYN_RECVSYN泛洪攻击或者您的SLB握手超时排查步骤立刻查看有SYN_SENT/SYN_RECV连接的目标IP/端口确认是来自SLB还是Redis还是OSSss -ant state SYN-SENT ss -ant state SYN-RECV立刻检查对应目标服务的状态如果是Redis/OSS进入云控制台检查如果是SLB检查SLB的健康检查状态立刻检查对应目标服务的防火墙/安全组/白名单如果是Redis/OSS进入云控制台检查如果是SLB检查SLB的后端服务器组的白名单如果是SYN_RECV立刻检查是否有SYN泛洪攻击用netstat/ss看SYN_RECV的数量是否在短时间内激增用tcpdump抓包看SYN包的来源IP是否大量是随机IP可以使用以下命令实时监控这个数值的变化(如果长期小于50就是正常的)watch -n 1 netstat -an | grep SYN_RECV | wc -l4、优化您的Linux系统的TIME_WAIT相关参数/etc/sysctl.conf # 电商API必加的TIME_WAIT优化参数 # 允许TIME_WAIT状态的连接被复用给新的SYN连接用 net.ipv4.tcp_tw_reuse 1 # 快速回收TIME_WAIT状态的连接Linux默认关闭但对单台多实例的电商API来说可以开 net.ipv4.tcp_tw_recycle 1 # 把TIME_WAIT的时间从默认的1分钟改到30秒Linux 3.2支持 net.ipv4.tcp_fin_timeout 30 # 把本地端口范围从默认的32768-60999改到1024-65535留足更多的本地端口给TCP连接用 net.ipv4.ip_local_port_range 1024 65535 # 把TCP最大SYN队列长度从默认的128改到1024-4096之间留足突发峰值的SYN队列冗余 net.core.somaxconn 4096 net.ipv4.tcp_max_syn_backlog 4096添加完成后执行以下命令生效# 重载sysctl配置 sudo sysctl -p # 验证配置是否生效 sudo sysctl -a | grep -i tw_reuse\|tw_recycle\|fin_timeout\|local_port_range\|somaxconn\|tcp_max_syn_backlog

更多文章