最近遇到 Unraid 运行几天就发生 Web-UI 显示不正常的问题,主要表现为主界面不显示硬盘或其他信息。

这个错误主要是因为系统运行时间太长(比如头图右上角显示我运行了103天),Nginx 的 Nchan 模块可以使用的最大内存量满了:

nchan: Out of shared memory while allocating message​​Increase nchan_max_reserved_memory​​

  • Nchan 是 Nginx 的一个模块,用于处理实时 Web 应用中的消息传递。出错信息表明 Nchan 模块在尝试分配消息时因共享内存不足而失败。Unraid 并没有给 Nchan 定义内存大小,试用的是默认值。

  • 为解决这个问题,你需要增加 nchan_max_reserved_memory​​ 的值。这可以在 Nginx 的配置文件中完成。你需要找到该指令所在的位置(可能在 nginx.conf​​ 或相关的配置文件中),然后增加它的值。

在 Unraid 系统中处理 Nginx Nchan 模块的内存问题具体操作步骤如下:

注意事项

  1. 在进行任何更改之前,建议备份所有重要的配置文件。

  2. 如果你不确定如何进行这些操作,建议寻求社区论坛或专业人士的帮助,尤其是在涉及到系统配置和性能调优时。

1. 访问 Unraid 管理界面

首先,确保你可以访问 Unraid 的管理界面。这通常是通过在浏览器中输入 Unraid 服务器的 IP 地址来完成的。

2. 调整 Nginx 配置

此问题源于 Unraid 上的 Nginx(非 Docker 容器),你需要通过命令行来编辑 Nginx 的配置文件。

  1. 打开终端窗口(可以通过 Unraid 的管理界面中的“终端”选项)。

  2. 使用文本编辑器(如 nano 或 vi)打开 Nginx 配置文件。Unraid 中位于 /etc/nginx/nginx.conf​​​​

    nano /etc/nginx/nginx.conf
    
  3. 找到 nchan_max_reserved_memory​​​​ 设置(如果有),并增加其值。

  4. 根据我的经验,Unraid 的 nginx.conf​​​​ 文件并没有这一行,所以需要我们手动添加,可以添加在最后,格式如下:

    http {
        ...
        nchan_max_reserved_memory 20M; # 建议512M
        ...
    } 

    只需要增加 nchan_max_reserved_memory 20M;​​ 这一行,上下的内容是代指现有代码。

    这里 20M 是示例值,你可以根据服务器的内存容量和需求调整这个数字,比如我内存够大,填了512M​​​。

    ​nchan_max_reserved_memory​​ 的最大可设置值取决于几个因素,其中最重要的是你的服务器的可用内存。这个设置指定了 Nginx 的 Nchan 模块可以用于消息队列和缓冲的最大共享内存量。设置这个值时需要考虑以下几点:

    • 服务器的总内存:不应该为 nchan_max_reserved_memory​​ 分配超过服务器总内存的一部分。记得留足够的内存给操作系统和其他运行中的应用程序。

    • Nchan 的需求:如果你的应用程序大量使用基于 Nchan 的实时通信,你可能需要分配更多内存给 Nchan。但这还是要基于服务器的总体内存容量。

    • 其他应用的内存需求:确保分配给 Nchan 的内存不会影响到服务器上其他重要服务的性能。

    • 性能与资源的平衡:在设置较大的 nchan_max_reserved_memory​​ 值时,应该监控服务器的性能,确保没有造成资源瓶颈。

    理论上,nchan_max_reserved_memory​​ 可以设置得相当大,只要不超过系统的物理内存上限。但在实践中,通常建议的做法是逐步增加这个值,从较低的值开始(例如几十到几百兆),根据应用的需要和服务器的性能进行调整。

  5. 保存并关闭文件。

    • 保存文件:

      • 当你完成编辑后,按下 Ctrl + O​​​(即 Control 键和字母 O 同时按下)。这是写入文件的命令。

      • 之后,Nano 会在底部显示一个提示,问你是否要保存文件,并显示当前文件名。如果要保存到这个文件名,直接按下 Enter​​​ 键。如果需要改变文件名,先输入新的文件名,然后按 Enter​​​。

    • 退出 Nano:

      • 保存文件后,按下 Ctrl + X​​​ 来退出 Nano。如果你在尝试退出前没有保存编辑过的文件,Nano 会提示你是否保存更改。按 Y​​​ 代表是(保存),按 N​​​ 代表否(不保存)。

    提示:

    • 在 Nano 的底部,你会看到一系列以 ^​​ 符号开头的指令,这表示 Ctrl​​ 键。例如,^X​​ 表示 Ctrl + X​​。

    • 如果你不小心进入了 Nano 的其他模式(如查找/替换模式),可以通过按 Ctrl + C​​ 来取消当前操作并回到常规编辑模式。

3. 重启 Nginx

  • 在终端中使用命令 nginx -s reload​​ 来重启 Nginx。

4. 监控和测试

  • 重启 Nginx 服务后,回到 Unraid 的管理界面,监控内存使用情况和系统性能。

  • 检查 Nginx 的日志文件以确认错误是否已解决。日志文件通常位于 /var/log/nginx/error.log​​

如果问题依然存在,可能需要考虑增加服务器的物理内存或者调整其他服务的资源分配。