挺常见的一个现象,原因多种多样,这里给一个可能比较适合测试环境的解决办法
    start_failed.png

    测试环境,经常需要重置数据库环境,保证测试不受干扰。有时候,就会出现这种情况,因为一个用户频繁的重置数据库,之前已经申请的共享内存没有释放,导致资源不够了。

    Linux有个ipcs命令,可以查看进程间通信的资源消耗情况,其中就包括共享内存

    1. [root@localhost ~]# ipcs -a | head -3
    2. ------ Message Queues --------
    3. key msqid owner perms used-bytes messages
    4. [root@localhost ~]# ipcs -m | grep guqi
    5. 0x030a36a9 1848508454 guqi 600 56 8
    6. 0x030a3e79 355860788 guqi 600 56 9
    7. 0x030a4261 564920631 guqi 600 56 9
    8. 0x030bb961 837911127 guqi 600 56 6
    9. 0x030a5db9 358580826 guqi 600 56 9
    10. 0x030a4e19 355992199 guqi 600 56 7
    11. 0x030a55e9 356024985 guqi 600 56 7
    12. 0x030a5201 356057754 guqi 600 56 7
    13. 0x030d4001 847217377 guqi 600 56 7
    14. 0x030a4a31 469304034 guqi 600 56 6
    15. 0x030a59d1 356090595 guqi 600 56 7
    16. 0x030a61a1 470975204 guqi 600 56 6
    17. 0x030d43e9 868123365 guqi 600 56 5
    18. [root@localhost ~]#

    常用的几个参数

    1. ipcs -m 查看系统使用的IPC共享内存资源
    2. ipcs -q 查看系统使用的IPC队列资源
    3. ipcs -s 查看系统使用的IPC信号量资源
    4. ipcs -l 查看系统的IPC相关参数的设置情况

    与之配套的另一个命令ipcrm,可以清理这些IPC资源

    1. ipcrm -M shmkey 移除用shmkey创建的共享内存段
    2. ipcrm -m shmid 移除用shmid标识的共享内存段
    3. ipcrm -Q msgkey 移除用msqkey创建的消息队列
    4. ipcrm -q msqid 移除用msqid标识的消息队列
    5. ipcrm -S semkey 移除用semkey创建的信号
    6. ipcrm -s semid 移除用semid标识的信号

    所以回到最初那个问题,有个一键恢复的命令

    1. ipcs -m | grep 用户名 | grep -v grep | awk '{print $2}' | xargs -n1 ipcrm -m