NWNU-Sun | 技术沉思录

代码是诗,bug是谜

   ::  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  77 随笔 :: 49 文章 :: 6 评论 :: 40763 阅读

1、问题描述

公司虚拟机无法连接,通过Openstack Dashboard进行登录查看,发现IO磁盘阻塞导致虚拟机奔溃,第一时间重启,但是报错,启动失败了,虚拟机状态显示错误,无法启动

2、排查

首先登录元数据库,操作nova库中instances表,对上述状态失败的记录进行修改,改为停止状态,这样才能进行启动

image-20240428093600667

接下来我们在终端输入tail -f /var/log/nova/nova-compute.log观察日志,并在Dashboard页面点击启动,有依旧无法启动并且后台报错

2024-04-28 09:27:21.352 3364 ERROR nova.compute.manager [req-1ef308a0-a74b-426e-a48b-6bab10a021b4 - - - - -] Error updating resources for node xian03.: OSError: [Errno 24] Too many open files: '/proc/meminfo'
2024-04-28 09:27:21.352 3364 ERROR nova.compute.manager Traceback (most recent call last):
2024-04-28 09:27:21.352 3364 ERROR nova.compute.manager   File "/usr/lib/python3.6/site-packages/nova/compute/manager.py", line 10167, in _update_available_resource_for_node
2024-04-28 09:27:21.352 3364 ERROR nova.compute.manager     startup=startup)
2024-04-28 09:27:21.352 3364 ERROR nova.compute.manager   File "/usr/lib/python3.6/site-packages/nova/compute/resource_tracker.py", line 884, in update_available_resource
2024-04-28 09:27:21.352 3364 ERROR nova.compute.manager     resources = self.driver.get_available_resource(nodename)
2024-04-28 09:27:21.352 3364 ERROR nova.compute.manager   File "/usr/lib/python3.6/site-packages/nova/virt/libvirt/driver.py", line 9301, in get_available_resource
2024-04-28 09:27:21.352 3364 ERROR nova.compute.manager     data["memory_mb_used"] = self._host.get_memory_mb_used()
2024-04-28 09:27:21.352 3364 ERROR nova.compute.manager   File "/usr/lib/python3.6/site-packages/nova/virt/libvirt/host.py", line 1190, in get_memory_mb_used
2024-04-28 09:27:21.352 3364 ERROR nova.compute.manager     (self._get_avail_memory_kb() // units.Ki))
2024-04-28 09:27:21.352 3364 ERROR nova.compute.manager   File "/usr/lib/python3.6/site-packages/nova/virt/libvirt/host.py", line 1169, in _get_avail_memory_kb
2024-04-28 09:27:21.352 3364 ERROR nova.compute.manager     with open('/proc/meminfo') as fp:
2024-04-28 09:27:21.352 3364 ERROR nova.compute.manager OSError: [Errno 24] Too many open files: '/proc/meminfo'

明显的文件打开数过多,修改服务器句柄数配置

# vi /etc/security/limits.conf

*   soft    nofile          65535
*   hard    nofile          65535
*   soft    nproc           65535
*   hard    nproc           65535

但是又不想重启,在终端执行 ulimit -n 65535 使得配置临时生效,通过执行ulimit -a查看配置生效,按理来讲应该没啥问题了,点击启动报同样的错误,令人疑惑的是,配置已经修改为何没起作用。

查找资料 发现

RHEL7/CentOS7 以后的系统limits.conf文件只影响通过pam登录的用户。systemd启动的进程需要在启动文件中(<服务>.service)进行设置。

也就是说咱得设置没生效,那问题就好解决了。

直接修改nova组件的systemd文件

# vi /usr/lib/systemd/system/openstack-nova-compute.service
[Unit]
Description=OpenStack Nova Compute Server
After=syslog.target network.target libvirtd.service

[Service]
Environment=LIBGUESTFS_ATTACH_METHOD=appliance
Type=notify
NotifyAccess=all
TimeoutStartSec=0
Restart=always
User=nova
ExecStart=/usr/bin/nova-compute
LimitNOFILE=infinity  # 添加该配置

[Install]
WantedBy=multi-user.target

重载配置并重启服务

systemctl --system daemon-reload
systemctl restart openstack-nova-compute

发现成功启动

3、要点

一、系统级别对于文件句柄数的限制

cat /proc/sys/fs/file-max
655350

修改配置

echo "fs.file-max = 655350" >> /etc/sysctl.conf
sysctl -p

二、进程级别对于文件句柄数的限制

ulimit -n

修改配置

vi /etc/security/limits.conf
*   soft    nofile          65535
*   hard    nofile          65535
*   soft    nproc           65535
*   hard    nproc           65535

对于服务器来说,file-max和ulimit都需要设置,否则会出现文件描述符耗尽的问题。

posted on   匿名者nwnu  阅读(26)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示