Linux 有关于内存的操作指南

在Linux系统中,内存管理是一个非常重要的部分,涉及查看内存使用情况、优化内存分配、排查内存问题等操作。以下是与内存相关的常见操作和命令:


1. 查看内存使用情况

  • free: 显示系统内存使用情况。

    • free -h: 以人类可读的格式显示内存使用情况(如KB、MB、GB)。
    • free -m: 以MB为单位显示内存使用情况。
    • free -s 5: 每5秒刷新一次内存使用情况。
  • top: 实时显示系统资源使用情况,包括内存。

    • M 键:按内存使用排序进程。
    • q 键:退出top
  • htop: top的增强版,提供更友好的界面。

    • F6 键:选择按内存排序。
  • vmstat: 显示虚拟内存统计信息。

    • vmstat 1: 每秒刷新一次内存和CPU使用情况。
  • cat /proc/meminfo: 查看详细的内存信息。

    • 显示总内存、空闲内存、缓存、交换分区等信息。
  • ps: 查看进程的内存使用情况。

    • ps aux --sort=-%mem: 按内存使用率排序显示进程。

2. 监控内存使用

  • sar: 系统活动报告工具,可以监控内存使用情况。

    • sar -r 1: 每秒显示内存使用情况。
    • sar -S 1: 每秒显示交换分区使用情况。
  • smem: 显示进程的内存使用情况。

    • smem -s rss: 按RSS(常驻内存)排序显示进程。
  • glances: 实时监控系统资源,包括内存。

    • glances: 启动监控界面。

3. 内存优化与清理

  • 清理缓存

    • sync; echo 1 > /proc/sys/vm/drop_caches: 清理页缓存。
    • sync; echo 2 > /proc/sys/vm/drop_caches: 清理目录项和inode缓存。
    • sync; echo 3 > /proc/sys/vm/drop_caches: 清理页缓存、目录项和inode缓存。
  • 调整交换分区

    • swapon /dev/sdX: 启用交换分区。
    • swapoff /dev/sdX: 禁用交换分区。
    • swapon -s: 查看当前启用的交换分区。
  • 调整内存分配策略

    • sysctl vm.swappiness=10: 调整系统使用交换分区的倾向(值越小,越少使用交换分区)。
    • sysctl vm.overcommit_memory=1: 允许内存超额分配(适用于特定场景)。

4. 内存泄漏排查

  • valgrind: 检测内存泄漏的工具(适用于C/C++程序)。

    • valgrind --leak-check=full ./your_program: 检测程序的内存泄漏。
  • pmap: 查看进程的内存映射。

    • pmap -x <PID>: 显示进程的详细内存映射。
  • gdb: 调试工具,可以用于分析内存问题。

    • gdb ./your_program: 启动调试。
    • gdb attach <PID>: 附加到正在运行的进程。
  • strace: 跟踪系统调用和信号。

    • strace -p <PID>: 跟踪指定进程的系统调用。

5. 内存压力测试

  • stress: 模拟内存压力。

    • stress --vm 1 --vm-bytes 1G: 分配1GB内存并持续占用。
  • memtester: 测试内存的稳定性和错误。

    • memtester 1G 10: 测试1GB内存,运行10次。

6. 虚拟内存管理

  • swap: 管理交换分区。

    • mkswap /dev/sdX: 创建交换分区。
    • swapon /dev/sdX: 启用交换分区。
    • swapoff /dev/sdX: 禁用交换分区。
  • zram: 使用压缩内存作为交换分区。

    • modprobe zram: 加载zram模块。
    • echo 1 > /sys/class/zram-control/hot_add: 添加zram设备。

7. 内存相关配置文件

  • /proc/meminfo: 系统内存信息。
  • /proc/sys/vm/swappiness: 控制交换分区的使用倾向。
  • /proc/sys/vm/overcommit_memory: 控制内存超额分配策略。
  • /proc/sys/vm/drop_caches: 控制缓存清理。

8. 内存相关内核参数调整

  • sysctl: 动态调整内核参数。

    • sysctl vm.swappiness=10: 调整交换分区使用倾向。
    • sysctl vm.overcommit_memory=1: 允许内存超额分配。
    • sysctl vm.dirty_ratio=20: 调整脏页写回磁盘的阈值。
  • 持久化内核参数

    • 编辑 /etc/sysctl.conf 文件,添加参数并执行 sysctl -p 生效。

9. 内存相关工具

  • numactl: 控制NUMA(非一致性内存访问)策略。

    • numactl --hardware: 显示NUMA节点信息。
    • numactl --cpunodebind=0 --membind=0 ./your_program: 绑定程序到指定NUMA节点。
  • numastat: 显示NUMA节点的内存统计信息。

    • numastat: 显示NUMA节点的内存分配情况。

10. 内存相关日志

  • dmesg: 查看内核日志,包括内存相关错误。

    • dmesg | grep -i memory: 过滤内存相关的日志。
  • /var/log/messages: 系统日志文件,可能包含内存相关错误。


11. 内存相关故障排查

  • OOM Killer(内存不足杀手)

    • dmesg | grep -i oom: 查看OOM Killer是否杀死了进程。
    • /proc/<PID>/oom_score: 查看进程的OOM分数(分数越高,越容易被杀死)。
  • 内存泄漏

    • 使用 valgrindpmapgdb 等工具排查。
  • 内存碎片

    • 使用 cat /proc/buddyinfo 查看内存碎片情况。

12. 内存相关高级操作

  • HugePages(大页内存)

    • cat /proc/meminfo | grep Huge: 查看大页内存使用情况。
    • sysctl vm.nr_hugepages=1024: 设置大页内存数量。
  • Transparent HugePages(透明大页)

    • cat /sys/kernel/mm/transparent_hugepage/enabled: 查看透明大页状态。
    • echo never > /sys/kernel/mm/transparent_hugepage/enabled: 禁用透明大页。

以上是与Linux内存相关的常见操作和命令,涵盖了从查看内存使用情况到优化和故障排查的各个方面。根据具体需求,可以选择合适的工具和方法进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飘飘燃雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值