zoukankan      html  css  js  c++  java
  • linux查看与修改交换内存配置(解决zabbix-agent启动报错)

    问题

    zabbix-agent在一台centos6.5上启动报错:

    cannot allocate shared memory of size 949056: [28] No space left on device
    cannot allocate shared memory for collector
    

      

    检查

    # sysctl -a | grep shm
        kernel.shmmax = 33554432
        kernel.shmall = 2097152
        kernel.shmmni = 4096
    

      

    kernel.shmmax        单个共享内存段的最大尺寸,单位byte
    kernel.shmall           系统可分配共享内存段的最大值,单位是页
    kernel.shmmni         共享内存段的最大数量

    还可以通过另一个命令查看:

    # ipcs -l
        ------ Shared Memory Limits --------
        max number of segments = 4096
        max seg size (kbytes) = 32768
        max total shared memory (kbytes) = 8388608
    

      

    max number of segments 对应 kernel.shmmni 
    max seg size (kbytes) 对应 kernel.shmmax (33554432 / 1024 = 32768)
    max total shared memory (kbytes) 对应 kernel.shmall (可以计算出页的大小了:8388608 * 1024 / 2097152 = 4096)

    解决

    下面开始分析问题,通过日志可以看到zabbix-agent需要的交换内存大小是949056,远小于kernel.shmmax(33554432),所以该参数没问题;

    用下面的命令可以查看交换内存的分配情况(为方便展示这里是一台正常运行了zabbix-agent的主机):

    # ipcs -m
        ------ Shared Memory Segments --------
        key        shmid      owner      perms      bytes      nattch     status      
        0x6c0105b0 0          zabbix     600        365056     6 
    

      在此基础上,统计下交换内存已经被用了多少(回到问题主机):

    # ipcs -m | grep ‘^0x‘ | awk ‘{print $5}‘ | awk ‘{sum+=$1}END{print sum}‘
        1805120
    

      

    1805120,远小于kernel.shmall(2097152 * 4096) ,所以该参数也没问题;

    到这里已经只剩下一个原因,数量被占满了:

    # ipcs -m | grep ‘^0x‘ | wc -l                                           
        4096
    

      这时候可以通过 ipcs -m 看看是哪些程序把数量占满了,若有异常可以选择用 ipcrm 释放,都是正常占用的话就选择提高最大数量(这里提高到两倍):

    # sysctl -w kernel.shmmni=8192
    

      若希望重启系统后依旧有效,把该参数写入配置文件:

    # /etc/sysctl.conf
        kernel.shmmni=8192
    

      执行sysctl -p生效

    # sysctl -p
    

      

  • 相关阅读:
    Android 关于ExpandableListView控件setOnChildClickListener无效问题
    Android SnapHelper
    Android java判断字符串包含某个字符段(或替换)
    Android中的CharSequence和String
    Java时间和时间戳的相互转换
    比较运算符和函数(四十一)
    数值运算符和函数(四十)
    字符函数(三十九)
    多表删除(三十八)
    无限级分类表设计(三十七)
  • 原文地址:https://www.cnblogs.com/navysummer/p/11368771.html
Copyright © 2011-2022 走看看