当前位置: 首页 > news >正文

如何修改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大小

  • `ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm)`.
  • 此问题是由于`容器共享内存不足导致`,可以通过启动容器指定参数或修改docker默认配置来修改shm大小。默认shm大小为 64MiB。
  • 查看shm大小
      • 方法一:通过sysctl.conf文件修改SHM
      • 方法二:通过/dev/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大小时,应确保系统有足够的内存资源来支持新的设置,以避免性能下降或系统不稳定的情况。同时,对于生产环境,建议在测试环境中进行充分测试后再进行更改。


http://www.mrgr.cn/news/55292.html

相关文章:

  • MyBatis入门程序之客户添加、更新与删除
  • 豆包大模型接口调用
  • 东方通 TongRDS V2 配置与开机自启指南及 Spring Boot 集成
  • zotero文献管理学习
  • VMware虚拟机三种网络模式详解
  • 【C】分支与循环2--while/for/do-while/goto以及break和continue在不同循环中的辨析~
  • 在西班牙买可乐喝时常用的句子,柯桥西班牙语培训
  • 使用Python处理API数据时,有哪些常见的数据清洗技巧?
  • 推荐一款专为Nginx设计的图形化管理工具: Nginx UI!
  • Docker笔记-搭建私有仓库
  • AI大模型混战后,以知识为中心驱动的人工智能迎来风口?
  • HTB:Optimum[WriteUP]
  • C++:模板进阶
  • LLM之Agent(十二)| OpenAI Agent-Swarm简单入门
  • RequestBody接收参数报错com.fasterxml.jackson.databind.exc.MismatchedInputException
  • 移动剧院:未来活动场馆的全新选择—轻空间
  • 使用 Python 爬取某财网并可视化今日涨停股票数据
  • 初探JSP
  • 如何使用 Git Revert 撤销合并提交
  • 公众号变现及生财内参项目建议
  • Linux虚拟机安装
  • Vue2、Vue3温习解惑知识点
  • java写一个MD5加密工具
  • Delphi下多线程控件BMDThread使用详解
  • nginx精讲
  • vue3 非父子组件间传值代码