1、问题描述
公司虚拟机无法连接,通过Openstack Dashboard进行登录查看,发现IO磁盘阻塞导致虚拟机奔溃,第一时间重启,但是报错,启动失败了,虚拟机状态显示错误,无法启动
2、排查
首先登录元数据库,操作nova库中instances表,对上述状态失败的记录进行修改,改为停止状态,这样才能进行启动
接下来我们在终端输入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都需要设置,否则会出现文件描述符耗尽的问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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技术实操系列(六):基于图像分类模型对图像进行分类