• Linux 性能调优内存篇:工具命令篇


    系统内存

    free

    free -mh
    • 第一列,total 是总内存大小;
    • 第二列,used 是已使用内存的大小,包含了共享内存;
    • 第三列,free 是未使用内存的大小;
    • 第四列,shared 是共享内存的大小;
    • 第五列,buff/cache 是缓冲区和缓存的大小;
    • 最后一列,available 是新进程可用内存的大小。

    注意:

    1、total = used + free + buff/cache
    2、available:vailable 不仅包含未使用内存,还包括了可回收的缓存(cache),所以一般会比未使用内存更大。不过,并不是所有缓存都可以回收,因为有些缓存可能正在使用中。

     vmstat

    当使用free查看buff/cache使用的内存后,再使用vmstat查看详细的使用量。

    hcache

    当我们想具体查看cache被哪些进程所使用就需要使用到hcache。

    hcache要求go的版本不得低于1.4.本次使用go1.7

    先安装go环境

    mkdir  /usr/local/go
    cd
    /usr/local/go
    wget https://dl.google.com/go/go1.7.6.linux-amd64.tar.gz

    vi /etc/profile export GOROOT=/usr/local/go export PATH=/usr/local/go/bin:$PATH source /etc/profile

    安装hcache

    wget https://silenceshell-1255345740.cos.ap-shanghai.myqcloud.com/hcache
    chmod +x hcache
    mv hcache /usr/local/bin/

    查看使用缓存最多的3个文件

    hcache -top 3

    查看使用缓存最多的3个文件(文件一列指显示文件名)

    hcache --top 3 --bname

    查看指定进程的缓存使用

    hcache -pid 1397

    进程内存

    top

    • VIRT 是进程虚拟内存的大小,只要是进程申请过的内存,即便还没有真正分配物理内存,也会计算在内。
    • RES 是常驻内存的大小,也就是进程实际使用的物理内存大小,但不包括 Swap 和共享内存。
    • SHR 是共享内存的大小,比如与其他进程共同使用的共享内存、加载的动态链接库以及程序的代码段等。
    • %MEM 是进程使用物理内存占系统总内存的百分比。

    系统缓存的命中率

    cachestat

    cachestat 1 3 
    TOTAL MISSES HITS DIRTIES BUFFERS_MB CACHED_MB
    2 0 2 1 17 279

    2 0 2 1 17 279

    2 0 2 1 17 279
    • TOTAL ,表示总的 I/O 次数;
    • MISSES ,表示缓存未命中的次数;
    • HITS ,表示缓存命中的次数;
    • DIRTIES, 表示新增到缓存中的脏页数;
    • BUFFERS_MB 表示 Buffers 的大小,以 MB 为单位;
    • CACHED_MB 表示 Cache 的大小,以 MB 为单位。

    进程缓存的命中率

    cachetop

    cachetop11:58:50 Buffers MB: 258 / Cached MB: 347 / Sort: HITS / Order: ascending
    PID UID CMD HITS MISSES DIRTIES READ_HIT% WRITE_HIT%
    13029 root python 1 0 0 100.0% 0.0%

    默认按照缓存的命中次数(HITS)排序,展示了每个进程的缓存命中情况。这里的 HITS、MISSES 和 DIRTIES ,跟 cachestat 里的含义一样,分别代表间隔时间内的缓存命中次数、未命中次数以及新增到缓存中的脏页数。

    而 READ_HIT 和 WRITE_HIT ,分别表示读和写的缓存命中率。

    SWAP

    设置swap大小

    swap的值都是安装系统的时候设置好的,一般设置为内存的两倍大小。使用过程中发现swap值过小只能添加。
    用free -m 命令查看当前swap大小

    使用下面的命令创建2G的空间
    dd if=/dev/zero of=/var/swap bs=1024 count=2048000
    if 表示infile,of表示outfile,bs=1024代表增加的模块大小,count=2048000代表2048000个模块,也就是2G空间
    将目的文件设置为swap分区文件
    mkswap /var/swap
    激活swap,立即启用交换分区文件
    mkswap -f /var/swap
    free -m查看swap已经增加了,但这只是临时性的,如果机器重启会失效
    vi /etc/fstab
    最后一行添加
    /var/swap swap swap defaults 0 0
    重启或free -m测试 swap添加成功

    下面是实战命令:
    [root@JD ~]# free -m
    total used free shared buff/cache available
    Mem: 3789 130 3401 8 258 3432
    Swap: 0 0 0
    [root@JD ~]# dd if=/dev/zero of=/var/swap bs=1024 count=2048000
    2048000+0 records in
    2048000+0 records out
    2097152000 bytes (2.1 GB) copied, 19.4374 s, 108 MB/s
    [root@JD ~]# mkswap /var/swap
    Setting up swapspace version 1, size = 2047996 KiB
    no label, UUID=a23c9dd9-87af-4517-8d70-bff7c714c18f
    [root@JD ~]# swapon /var/swap
    swapon: /var/swap: insecure permissions 0644, 0600 suggested.
    [root@JD ~]# cat /proc/swaps
    Filename Type Size Used Priority
    /var/swap file 2047996 0 -2
    [root@JD ~]# vim /etc/fstab
    -bash: vim: command not found
    让上面命令在重启后仍然生效需要以下操作:
    [root@JD ~]# vi /etc/fstab
    最后一行添加
    /var/swap swap swap defaults 0 0
    再查看内存,已经设置了swap了,执行上面命令导致buff/cache里面多了不少内存,过段时间会减少,或者直接重启可以清掉
    [root@JD ~]# free -m
    total used free shared buff/cache available
    Mem: 3789 154 1286 8 2348 3379
    Swap: 1999 0 1999

    reboot重启后再查看结果如下:
    [root@JD ~]# free -m
    total used free shared buff/cache available
    Mem: 3789 146 3411 8 232 3414
    Swap: 1999 0 1999

    如果不再需要swap,可以清理该分区:
    [root@mysql01 var]# swapoff /var/swap

  • 相关阅读:
    函数【二】嵌套/作用域/名称空间
    内核模块加载错误 “Invalid module format” 解决办法
    linux oops调试
    linux 工具
    makefile 嵌套
    scheduling while atomic 出现的错误
    Windows下VSCode编译调试c/c++
    window markdown 编辑器
    linux 比较命令
    openwrt 加入nand flash的支持
  • 原文地址:https://www.cnblogs.com/-wenli/p/13768822.html
Copyright © 2020-2023  润新知