【Linux命令饲养指南】04-Linux系统资源命令:看看你的服务器是“肾虚”还是“猛男”
兄弟们前面三篇我们学会了在Linux里走路、翻箱倒柜、改文件。今天咱们玩点高级的——给你的服务器做个全身体检。内存剩多少CPU是几核哪个进程在偷吃哪个端口被占用了学完这篇你就能像个老中医一样望闻问切把系统状态看得明明白白。一、查看内存信息 ——free -m看看内存条还剩多少“床位”服务器就像一家酒店内存就是客房。进程就是客人。你得知道有多少间房住了人多少间空着多少间可以腾出来。free-m输出大概长这样total used free shared buff/cache available Mem: 3563 1204 629 1 1999 2359 Swap: 1024 193 831逐个拆解客房比喻版字段含义大白话total总内存容量MB酒店总共有多少间房used已使用的内存量已经住人的房间数free完全空闲的内存量没人住、也没被预订的空房间shared多个进程共享的内存量几个客人合住一间房比如公共卫生间buff/cache缓冲区和缓存占用的内存酒店留了几间房用来放行李和外卖为了加速磁盘读写和文件访问随时可以清出来给客人住available可立即分配给新程序的内存量真正能用的房间包括空闲房 可以清出来的行李房关键公式used free buff/cache total最重要的一列看available它告诉你还能开多少间房给新客人。别盯着free看因为buff/cache随时可以回收。Swap交换分区相当于酒店的临时折叠床。内存不够时把一些不常用的客人挪到折叠床上磁盘虚拟出来的内存。速度比内存慢但能应急。K8s部署时通常会禁用Swap怕它拖慢速度。 举个free -m就像你打开手机查余额——total是你银行卡总额used是花掉的available是还能刷的包括余额和信用卡额度。二、查看CPU信息 ——more /proc/cpuinfo看看CPU是“i3”还是“i9”/proc/cpuinfo是个虚拟文件里面躺着CPU的户口本。more/proc/cpuinfo重点关注两行model name:11th Gen Intel(R)Core(TM)i5-11320H 3.20GHz cpu cores:4字段含义大白话model nameCPU型号主频这CPU是哪个厂家、哪一代、几把刷子cpu cores单个物理CPU的核心数一个CPU里面有几个“打工人”⚠️ 注意如果服务器有多颗物理CPU还会看到physical id字段。用grep -E physical id|cpu cores /proc/cpuinfo可以统计总核心数。最简单的办法nproc直接看总核心数。如何快速看总核心数grep-cprocessor/proc/cpuinfo# 统计processor行数就是总线程数包括超线程三、查看系统版本和位数 —— 知道自己开的是啥车系统版本cat /etc/*releasecat/etc/*release输出类似CentOS Linux release 7.9.2009 (Core)告诉你操作系统是CentOS、Ubuntu还是RedHat以及版本号。装软件、查兼容性时必看。系统位数uname -muname-m输出x86_64→64位操作系统现在99%的服务器都是这个输出i686或i386→32位操作系统古董级 技巧别人问你系统版本你敲cat /etc/os-release更标准。但cat /etc/*release通配符大法能覆盖绝大多数发行版。四、查看磁盘空间 ——df -h硬盘还剩多少Gdf disk free-h human-readable以G、M、K显示而不是字节。df-h输出Filesystem Size Used Avail Use% Mounted on devtmpfs 1.8G 0 1.8G 0% /dev tmpfs 1.8G 16K 1.8G 1% /dev/shm tmpfs 1.8G 476K 1.8G 1% /run tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup /dev/vda3 49G 11G 37G 23% / /dev/vda2 200M 5.8M 194M 3% /boot/efi tmpfs 357M 0 357M 0% /run/user/0字段含义Size总容量Used已使用Avail可用Use%使用百分比Mounted on挂载点哪个目录在用这块磁盘⚠️ 注意Use%超过80%就该清理了超过95%系统可能出问题。用du -sh /*可以看哪个目录最大。五、查看端口和进程 —— 抓出“内鬼”1. 查看端口是否被占用 ——netstat -anp | grep 端口号netstat-anp|grep:22-a显示所有连接和监听端口-n以数字形式显示IP和端口不解析域名-p显示占用端口的进程PID和名字输出示例tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd说明22端口被sshd进程PID 1234占用了。再比如tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6091/sshd tcp 0 36 172.20.37.110:22 117.188.91.8:4790 ESTABLISHED 423124/sshd: root [ tcp 0 0 172.20.37.110:22 174.64.199.77:43810 ESTABLISHED 423269/sshd: [accep tcp6 0 0 :::22 :::* LISTEN 6091/sshd代表你的服务器 22 端口SSH 远程连接正常开启并且当前已有正常的远程连接在使用服务一切正常。 如果netstat找不到试试ss -tlnp | grep :22新版Linux推荐ss。2. 查看进程是否启动 ——ps -ef | grep 进程名ps-ef|grepsshdps -ef显示所有进程的详细信息UID、PID、PPID、CMD等| grep sshd过滤出包含sshd的行输出root 1234 1 0 10:00 ? 00:00:00 /usr/sbin/sshd -D root 5678 1234 0 10:05 ? 00:00:00 sshd: rootpts/0说明sshd进程正在运行甚至能看到有人通过ssh登录了。 经典用法ps -ef | grep java查Java进程ps -ef | grep mysql查数据库。3. 杀死进程 ——kill -9 PIDkill-91234kill发送信号给进程-9SIGKILL强制杀死相当于拔电源1234进程ID从ps或netstat里看到的⚠️ 先礼后兵一般先用kill PID默认-15优雅退出不行再用-9。就像先劝“你走吧”再动手扔出去。六、实时进程监控 ——topLinux的“任务管理器”top命令就像Windows的CtrlAltDel打开的任务管理器实时刷新按q或CtrlC退出。top屏幕会分成好几块我们一行行啃。第一行系统概况负载均衡top - 16:30:46 up 27 days, 20:38, 1 user, load average: 0.01, 0.04, 0.00项目含义大白话16:30:46当前时间现在几点up 27 days, 20:38系统运行时间天、时:分服务器连续开机27天20小时38分钟没重启1 user当前登录的用户数终端连接数有1个人在用不是指系统用户总数load average: 0.01, 0.04, 0.00系统平均负载1分钟、5分钟、15分钟这个最重要相当于“排队人数”。数值越高越忙。如何判断负载高不高负载值一般不超过CPU核心数 × 0.8算正常。比如4核CPU负载 3.2 就OK。如果长期 4说明系统累趴了。查看核心数top里按1就能看到每个CPU的使用情况同时顶部也会显示核心数。或者用nproc。第二行任务进程统计Tasks: 94 total, 1 running, 93 sleeping, 0 stopped, 0 zombie字段含义大白话total总进程数一共有94个进程在运行或休眠running正在运行的进程数正在干活的sleeping睡眠的进程数在摸鱼等唤醒的stopped停止的进程数被暂停的zombie僵尸进程死了但没被收尸的zombie不为0就要警惕第三行CPU使用率核心指标%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.2 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st字段含义大白话us用户进程占用你跑的程序如MySQL、Java占的CPU重点关注sy系统内核占用Linux内核自己在忙ni优先级调度占用调整过优先级的进程id空闲百分比CPU在摸鱼当前99.2%空闲非常轻松wa等待I/O占用等硬盘读写如果高说明磁盘慢hi硬中断占用硬件设备打断CPU比如网卡si软中断占用软件触发的中断st虚拟机偷取时间云服务器被宿主机抢走的CPU 当前状态CPU几乎完全空闲服务器非常轻松记忆法us高说明你的应用忙sy高说明内核忙wa高说明硬盘慢id高说明很闲。加起来是100%。在top界面按1展开每个CPU核心的使用率可以看到每个核的负载。第四行物理内存MiB Mem : 3563.5 total, 562.6 free, 1268.8 used, 2058.7 buff/cache字段含义大白话total物理内存总大小服务器一共3.5G 左右内存free完全空闲内存真正闲着没用的内存还有562Mused应用已使用内存程序、服务实际占用了1.2Gbuff/cache缓冲区/缓存内存系统预读文件用的临时内存不够用时会自动释放当前状态内存充足服务器压力很小跟free -m差不多单位是MiB兆字节。按E可以循环切换单位KB、MB、GB。第五行交换分区SwapMiB Swap: 1025.0 total, 831.4 free, 193.6 used. 2296.8 avail Mem字段含义大白话total交换分区总大小虚拟内存总共 1025Mfree空闲交换分区虚拟内存还剩 831.4M 没用used已使用交换分区虚拟内存用了 193.6Mavail Mem可用内存预估系统还能分配给新程序的内存约 2296.8M当前状态几乎没怎么用虚拟内存内存非常充裕如果used经常不为0说明物理内存不够用了在靠磁盘撑。K8s环境会禁用Swap。top 下方的进程列表重点列名含义大白话PID进程ID每个进程的身份证号USER启动进程的用户谁启动的PR调度优先级内核调度用的NI进程优先级nice值数值越小优先级越高-20到19VIRT虚拟内存大小进程申请的总“虚拟地址空间”RES物理内存占用真正占用的内存条大小重要SHR共享内存和其他进程共用的内存S进程状态R运行、S睡眠、D不可中断、Z僵尸、T停止%CPUCPU使用百分比注意这是占单个核的百分比。比如100%表示占满1个核200%表示占满2个核。%MEM物理内存百分比占用了总内存的百分之几TIME累计CPU时间进程启动后总共用了多少CPU时间COMMAND进程名字叫什么在top界面按P按CPU使用率降序排列找出谁最耗CPU按M按内存使用率降序排列找出谁最吃内存按q退出top 运维金句服务器卡了先敲top按P看哪个进程CPU高再决定是杀还是优化。七、其他常用系统命令命令作用大白话ifconfig查看网络接口信息IP、MAC、流量看看网卡IP是多少注意新Linux用ip addrhostname查看或临时修改主机名你这台服务器叫啥名字reboot重启系统重启需要root权限shutdown -h now立即关机关机-hhaltnow马上⚠️ 云服务器慎用reboot和shutdown重启前记得保存数据。八、动手做一个“体检报告”假设你刚登录一台服务器想看看它状态好不好# 1. 系统版本和位数cat/etc/*releaseuname-m# 2. 内存还剩多少free-m# 重点看 available# 3. CPU型号和核心数more/proc/cpuinfo|grepmodel name|head-1nproc# 4. 磁盘空间df-h# 5. 有没有人通过SSH登录查22端口netstat-anp|grep:22# 6. 有没有MySQL在跑ps-ef|grepmysql# 7. 打开top按P和M看看谁最野top# 按1看每个CPU核心按q退出# 8. 如果发现某个进程占满CPU记下PID杀掉它谨慎# kill -9 PID做完这一套你就能拍着胸脯说“这服务器我门儿清”九、总结一张表速查想干啥命令看内存MBfree -m看CPU型号cat /proc/cpuinfo | grep model name看CPU核心数nproc或grep -c processor /proc/cpuinfo看系统版本cat /etc/*release看系统位数uname -m看磁盘空间df -h看端口占用netstat -anp | grep :端口号看进程ps -ef | grep 进程名杀进程kill -9 PID实时监控top按P按M按1按q退出看IP地址ifconfig或ip addr重启reboot关机shutdown -h now结尾学到这里老铁们已经了解了Linux系统管理的半壁江山。从最开始的pwd看路到今天的top看负载你已经从一个“命令行小白”进化成了“系统体检师”。我的状态就是别怕敲命令服务器不会爆炸。但别在别人生产环境乱敲kill -9除非你想体验一下“删库跑路”的刺激。下一篇预告用户和权限管理chmod、chown、useradd让我们学会“谁可以进哪个房间”。本文由一位曾经用kill -9干掉了自己SSH会话的憨憨菜鸟小白撰写各位友友们请珍惜你的远程连接。如果觉得有用点赞 收藏⭐关注走一波咱们下期见啦~~