Linux进程管理与网络管理核心技术详解

📅 2026/7/16 11:35:30
Linux进程管理与网络管理核心技术详解
1. Linux进程管理基础概念在Linux系统中进程管理是系统管理员和开发人员必须掌握的核心技能之一。进程Process可以理解为正在执行的程序实例它是操作系统进行资源分配和调度的基本单位。每个进程都有自己独立的内存空间、文件描述符、环境变量等资源。Linux采用多道程序设计技术通过时间片轮转的方式实现多任务并发执行。现代CPU的运算速度极快纳秒级通过快速切换不同进程的执行在宏观上实现了多个程序同时运行的效果。1.1 进程状态及其转换Linux进程通常有以下几种主要状态运行态Running进程正在CPU上执行就绪态Ready进程已准备好运行等待CPU分配时间片睡眠态Sleeping可中断睡眠Interruptible等待某些条件满足可以被信号唤醒不可中断睡眠Uninterruptible通常发生在等待硬件I/O操作完成时停止态Stopped进程被暂停执行如收到SIGSTOP信号僵尸态Zombie进程已终止但其退出状态尚未被父进程获取这些状态之间的转换关系如下就绪态 -- 运行态 运行态 -- 睡眠态 睡眠态 -- 就绪态 运行态 -- 停止态 停止态 -- 就绪态 运行态 -- 僵尸态提示不可中断睡眠状态的进程通常与硬件操作相关强制终止这类进程可能导致数据损坏或硬件状态不一致。2. 常用进程管理命令详解2.1 进程查看命令ps命令是最基础的进程查看工具常用组合ps aux # 查看系统所有进程的详细信息 ps -ef # 以完整格式列出所有进程 ps -l # 以长格式显示当前终端相关进程 ps -eLf # 查看进程及其线程信息top命令提供动态实时视图top # 默认视图按CPU使用率排序 top -p PID # 监控指定进程 top -H -p PID # 查看指定进程的所有线程在top界面中常用快捷键P按CPU使用率排序M按内存使用量排序N按PID排序k终止指定进程q退出top2.2 进程控制命令kill命令用于向进程发送信号kill -l # 列出所有可用信号 kill -9 PID # 强制终止进程SIGKILL kill -15 PID # 优雅终止进程SIGTERM kill -19 PID # 暂停进程SIGSTOP kill -18 PID # 恢复暂停的进程SIGCONTpkill和killall可以根据进程名操作pkill -9 nginx # 强制终止所有nginx进程 killall -u user1 # 终止指定用户的所有进程2.3 高级进程管理工具htop是top的增强版提供更友好的交互界面htop # 需要额外安装lsof列出被进程打开的文件lsof -i :80 # 查看哪些进程在使用80端口 lsof -u user1 # 查看指定用户打开的文件 lsof /var/log # 查看哪些进程在访问指定目录strace跟踪进程的系统调用strace -p PID # 跟踪运行中进程的系统调用 strace ls # 跟踪命令执行时的系统调用3. 进程优先级与资源控制3.1 nice值与进程优先级Linux进程的优先级由nice值决定范围从-20最高到19最低。默认nice值为0。nice -n 5 command # 以nice值5启动命令 renice 10 -p PID # 修改运行中进程的nice值注意普通用户只能降低优先级增加nice值只有root用户可以提高优先级。3.2 CPU亲和性设置taskset命令可以设置进程的CPU亲和性taskset -c 0,1 command # 将进程绑定到CPU0和CPU1 taskset -p PID # 查看进程的CPU亲和性3.3 cgroups资源控制cgroups控制组是Linux内核提供的资源管理机制# 创建cgroup cgcreate -g cpu,memory:/mygroup # 设置CPU限制 cgset -r cpu.cfs_period_us100000 -r cpu.cfs_quota_us50000 /mygroup # 将进程加入cgroup cgclassify -g cpu,memory:/mygroup PID4. Linux网络管理核心技术4.1 网络接口管理ifconfig已逐渐被ip命令取代ifconfig eth0 up # 启用网卡 ifconfig eth0 down # 禁用网卡 ifconfig eth0 192.168.1.100 netmask 255.255.255.0 # 配置IPip命令推荐使用ip link show # 显示所有网络接口 ip addr add 192.168.1.100/24 dev eth0 # 添加IP地址 ip route show # 显示路由表 ip neigh show # 显示ARP缓存4.2 网络连接分析netstat命令netstat -tulnp # 查看监听端口及对应进程 netstat -s # 显示网络统计信息ss命令netstat的替代品ss -ltn # 列出所有TCP监听端口 ss -o state established ( dport :80 or sport :80 ) # 查看所有HTTP连接tcpdump网络抓包tcpdump -i eth0 port 80 -w capture.pcap # 捕获80端口流量并保存 tcpdump -r capture.pcap -n # 读取捕获文件4.3 防火墙管理iptables基础操作iptables -L -n -v # 列出所有规则 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许SSH iptables -A INPUT -j DROP # 默认拒绝所有输入nftables新一代防火墙nft list ruleset # 列出所有规则 nft add table inet mytable # 创建新表 nft add chain inet mytable mychain # 创建链5. 系统监控与性能分析5.1 实时系统监控vmstat报告虚拟内存统计vmstat 1 5 # 每秒采样一次共5次iostat监控磁盘I/Oiostat -x 1 # 显示扩展磁盘统计每秒刷新sar系统活动报告sar -u 1 3 # CPU使用率每秒一次共3次 sar -r 1 3 # 内存使用情况 sar -n DEV 1 3 # 网络流量统计5.2 性能瓶颈分析perf性能分析工具perf top # 实时显示消耗CPU最多的函数 perf record -g command # 记录命令执行的性能数据 perf report # 分析记录的数据strace系统调用跟踪strace -c command # 统计命令执行的系统调用 strace -T -p PID # 跟踪进程并显示每个调用耗时6. 实战排查高CPU占用问题当系统出现CPU使用率过高时可以按照以下步骤排查使用top命令找出占用CPU高的进程top -c获取该进程的详细线程信息top -H -p PID ps -Lf PID分析线程堆栈pstack PID gdb -p PID thread apply all bt使用perf生成火焰图perf record -F 99 -p PID -g -- sleep 30 perf script | stackcollapse-perf.pl | flamegraph.pl flame.svg根据分析结果优化代码或配置7. 进程间通信IPC机制Linux提供了多种进程间通信方式7.1 管道Pipecommand1 | command2 # 匿名管道 mkfifo mypipe # 命名管道7.2 信号Signalkill -SIGUSR1 PID # 发送自定义信号 trap handler SIGUSR1 # 在脚本中捕获信号7.3 共享内存// C代码示例 int shm_id shmget(key, size, IPC_CREAT|0666); void *shm_ptr shmat(shm_id, NULL, 0);7.4 消息队列// C代码示例 int msgid msgget(key, IPC_CREAT|0666); msgsnd(msgid, msg, sizeof(msg), 0); msgrcv(msgid, msg, sizeof(msg), type, 0);7.5 套接字Socket# 网络套接字 nc -l 8080 # 监听8080端口 nc localhost 8080 # 连接 # Unix域套接字 socat UNIX-LISTEN:/tmp/mysock - # 服务端 socat UNIX-CONNECT:/tmp/mysock - # 客户端8. 系统服务管理8.1 systemd服务管理systemctl start nginx # 启动服务 systemctl stop nginx # 停止服务 systemctl restart nginx # 重启服务 systemctl status nginx # 查看服务状态 systemctl enable nginx # 设置开机启动 systemctl disable nginx # 禁用开机启动 journalctl -u nginx # 查看服务日志8.2 创建自定义服务创建服务文件/etc/systemd/system/myapp.service[Unit] DescriptionMy Custom Application Afternetwork.target [Service] ExecStart/usr/local/bin/myapp WorkingDirectory/var/lib/myapp Usermyapp Groupmyapp Restarton-failure [Install] WantedBymulti-user.target然后执行systemctl daemon-reload systemctl start myapp9. 自动化运维脚本示例9.1 监控进程并自动重启#!/bin/bash SERVICEnginx LOG_FILE/var/log/nginx_monitor.log while true; do if ! pgrep -x $SERVICE /dev/null; then echo $(date): $SERVICE is down, restarting... $LOG_FILE systemctl restart $SERVICE fi sleep 60 done9.2 批量管理多台服务器#!/bin/bash SERVERS(server1 server2 server3) COMMANDuptime for server in ${SERVERS[]}; do echo $server ssh $server $COMMAND echo done10. 安全加固建议最小权限原则使用非root用户运行服务通过sudo授权特定命令设置适当的文件权限定期更新# CentOS/RHEL yum update -y # Debian/Ubuntu apt update apt upgrade -ySSH安全禁用root登录使用密钥认证修改默认端口启用fail2ban防火墙配置# 仅允许必要的端口 iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -j DROP进程监控使用auditd监控敏感操作定期检查异常进程监控网络连接在实际工作中我发现很多性能问题都源于对系统原理理解不够深入。比如我曾经遇到一个Java应用频繁卡顿的问题最终发现是因为没有正确设置JVM参数导致频繁的Full GC。通过调整-Xmx和-Xms参数并添加适当的GC参数性能得到了显著提升。这也提醒我们在进行系统管理时不能只停留在命令使用的层面还需要深入理解背后的原理。