如何修改Ubuntu系统的共享内存shm大小

ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm).

此问题是由于容器共享内存不足导致,可以通过启动容器指定参数或修改docker默认配置来修改shm大小。默认shm大小为 64MiB。

查看shm大小

df -h | grep shm

在这里插入图片描述


在Ubuntu服务器中,SHM(共享内存)的大小和配置可以通过多种方式进行修改。以下是一些常见的修改SHM的方法和步骤:

方法一:通过sysctl.conf文件修改SHM

  1. 打开/etc/sysctl.conf文件:

    sudo nano /etc/sysctl.conf
    

    或者使用vimgedit等其他文本编辑器。

  2. 在文件末尾添加或修改以下行来设置SHM的最大值(以字节为单位)。例如,将SHM最大值设置为2GB:

    kernel.shmmax=2147483648
    

    如果需要调整其他SHM相关的参数,如kernel.shmall(共享内存段的总数),也可以在此文件中进行配置。

  3. 保存并关闭文件。

  4. 使配置生效:

    sudo sysctl -p
    

方法二:通过/dev/shm目录调整

/dev/shm是一个基于内存的tmpfs文件系统,用于存储临时文件。默认情况下,它的大小是物理内存的一半。如果需要调整其大小,可以通过重新挂载的方式来实现。

  1. 查看当前/dev/shm的大小:

    df -h | grep /dev/shm
    
  2. 重新挂载/dev/shm并指定新的大小。例如,将其大小设置为512MB或12G:

    sudo mount -o remount,size=512m /dev/shm
    sudo mount -o remount,size=12G /dev/shm
    

在这里插入图片描述

或者编辑/etc/fstab文件来永久更改大小:

sudo nano /etc/fstab

找到包含/dev/shm的行,并修改size参数。例如:

tmpfs /dev/shm tmpfs defaults,size=512m 0 0

保存并关闭文件,然后执行sudo mount -o remount /dev/shm使更改生效。

方法三:使用脚本自动调整

对于需要频繁调整SHM大小的场景,可以编写一个脚本来自动完成这些步骤。以下是一个简单的Bash脚本示例:

#!/bin/bash

# 获取页面大小和物理页面数
page_size=$(getconf PAGE_SIZE)
phys_pages=$(getconf _PHYS_PAGES)

# 计算shmmax和shmall的值
shmmax=$((phys_pages * page_size))
shmall=$((phys_pages / 2))

# 将计算结果写入sysctl.conf文件
echo "kernel.shmmax=$shmmax" | sudo tee -a /etc/sysctl.conf
echo "kernel.shmall=$shmall" | sudo tee -a /etc/sysctl.conf

# 使配置生效
sudo sysctl -p

# 重新挂载/dev/shm(如果需要调整大小)
# sudo mount -o remount,size=XXXm /dev/shm

将上述脚本保存为.sh文件,然后给予执行权限并运行它:

chmod +x adjust_shm.sh
sudo ./adjust_shm.sh

请注意,在调整SHM大小时,应确保系统有足够的内存资源来支持新的设置,以避免性能下降或系统不稳定的情况。同时,对于生产环境,建议在测试环境中进行充分测试后再进行更改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GL_Rain

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

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

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

打赏作者

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

抵扣说明:

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

余额充值