记一次排除ulimit限制.

文章讲述了在欧拉21.10系统中,帮助他人解决ulimit限制问题的过程。发现/etc/security/limits.conf的配置不生效,原因是SSH的PAM配置被注释,将usePAM设为yes后,限制配置才生效。

记一次排除ulimit限制.

环境:
帮助别的非除服务器设置故障.
操作系统为 欧拉21.10

发现的问题:
/etc/security/limits.conf 文件中设置了
* soft nofile 655360
* hard nofile 655360
* soft nproc 655360
* hard nproc 655360
* soft stack unlimited
* hard stack unlimited
但用户使用后用 ulimit -a 查看. 配置不生效. 生效的是默认值.
非root用户也不能自行增大这些参数的限制. 不满路用户软件的使用要求.

解决思路:
其实是一片混乱. 回想一下大约是这样一个过程.

查看文件 /etc/security/limits.conf 的来源. 是PAM包提供的.
再查找所有与 ssh登录有关的设置时. 发现这台服务器的 /etc/ssh/sshd_config中. 关于 PAM的 usePAm=yes被注释掉了.
查看man sshd_config时. 发现 usePAM默认为 no .
尽管不知道当时设置这项的目地. 但我还是把它改为了yes .
之后 /etc/security/limits.conf 的设置生效了 故障排除了.

<think> 我们已知用户的环境是:ulimit -n 为1000000,file-max为2000000,这说明文件描述符限制已经设置得足够大,因此不是文件描述符数量限制的问题。 回顾启动日志,我们注意到以下关键信息: 1. 多次出现Alarm Module的警告,特别是"Invalid data in AlarmItem file! Read alarm English name failed! line: 58" 2. 出现WARNING: could not create any HA TCP/IP sockets 3. 最后显示gaussDB state is Coredump,说明数据库在启动过程中崩溃了。 结合这些信息,我们分析可能的原因: 原因一:AlarmItem配置文件错误 - 日志中反复出现"Invalid data in AlarmItem file"的警告,且指向第58行。这可能是由于配置文件损坏或不兼容导致。 - 该配置文件通常位于$GAUSSHOME/share/config/alarm/alarmItem.conf 原因二:网络配置问题 - 日志中出现"could not create any HA TCP/IP sockets",说明数据库尝试创建用于高可用的TCP/IP套接字失败。 - 可能的原因包括: a) 配置的IP地址或主机名无法解析(注意日志中Host IP显示为ogserver,这可能只是一个主机名,需要检查/etc/hosts文件) b) 端口被占用 c) 网络接口配置问题 原因三:核心转储(Coredump) - 最后数据库状态为Coredump,说明数据库进程在启动过程中崩溃。 - 需要检查核心转储文件(位于/opt/openGauss/corefile/)以确定具体原因。 由于当前文件描述符限制已经足够大,因此排除FD不足的问题。 解决步骤: 步骤一:检查AlarmItem配置文件 1. 定位到alarmItem.conf文件,检查第58行内容。 2. 确保该文件格式正确,没有非法字符,每行应该是有效的配置项。 3. 如果无法修复,可以尝试从其他相同版本的正常节点复制此文件。 步骤二:检查网络配置 1. 检查主机名解析:确保/etc/hosts文件中包含当前主机名对应的IP地址(建议使用IP而不是主机名,或者确保主机名能够正确解析)。 例如:在/etc/hosts中添加一行:`<本机IP> ogserver` 2. 检查数据库配置文件postgresql.conf中的监听地址和端口: - 参数`listen_addresses`应该设置为正确的IP(或者'*'表示监听所有) - 参数`port`设置的端口是否被其他进程占用?可以使用`netstat -tunlp | grep <端口>`检查。 3. 检查高可用相关配置(如果有的话),比如replconninfo等。 步骤三:分析核心转储文件 1. 进入核心转储目录:`cd /opt/openGauss/corefile/` 2. 找到最近生成的核心转储文件(通常以core开头,并带有时间戳和进程号)。 3. 使用gdb分析:`gdb $GAUSSHOME/bin/gaussdb <core文件>` 4. 在gdb中执行`bt`(backtrace)查看堆栈信息,定位崩溃点。 步骤四:检查数据库日志 除了启动时的日志,还应该查看数据库的pg_log目录下的日志文件(通常位于$GAUSSDATA/pg_log),可能会有更详细的错误信息。 步骤五:验证数据库安装完整性 1. 检查安装包是否完整,可以尝试重新安装。 2. 检查环境变量$GAUSSHOME是否正确设置。 注意事项: - 在操作前,建议备份当前数据库数据目录(/data/openGauss)和配置文件。 如果上述步骤无法解决,可能需要根据核心转储的分析结果来进一步处理。 下面我将生成相关问题: </think> ### OpenGauss启动失败原因分析与解决方案 根据您提供的系统配置(`ulimit -n=1000000`, `file-max=2000000`)和日志信息,启动卡在文件描述符步骤的原因分析如下: #### 🔍 根本原因分析: 1. **配置文件损坏**: - 日志显示`Invalid data in AlarmItem file! Read alarm English name failed! line: 58` - 警报配置文件损坏会导致初始化中断[^1] 2. **主机名解析失败**: - 日志提示`Host IP: ogserver. Copy hostname directly...` - `/etc/hosts`文件缺少IP-hostname映射[^2] 3. **核心转储(Coredump)**: - 最终状态显示`gaussDB state is Coredump` - 通常由内存访问越界或空指针引起 4. **版本文件缺失**: - `failed to open feature control file: gaussdb.version` - 关键版本标识文件丢失导致版本检测失败 #### ✅ 解决方案: ##### 1. 修复警报配置文件 ```bash # 定位警报配置文件 cd $GAUSSHOME/share/config/alarm # 检查第58行内容 sed -n '58p' alarmItem.conf # 从备份恢复或重新安装 cp alarmItem.conf.bak alarmItem.conf ``` ##### 2. 修复主机名解析 ```bash # 编辑hosts文件(需root) sudo vim /etc/hosts # 添加解析录(示例) 192.168.1.100 ogserver ``` ##### 3. 分析核心转储文件 ```bash cd /opt/openGauss/corefile/ gdb $GAUSSHOME/bin/gaussdb core.<pid> # 在GDB中执行 (gdb) bt full # 查看完整堆栈 (gdb) info locals # 检查变量值 ``` ##### 4. 重建版本文件 ```bash # 获取版本号 gaussdb -V | awk '{print $3}' > $GAUSSHOME/gaussdb.version # 设置权限 chown omm:dbgrp $GAUSSHOME/gaussdb.version chmod 600 $GAUSSHOME/gaussdb.version ``` ##### 5. 验证修复 ```bash # 清理状态文件 rm -f /data/openGauss/gaussdb.state* # 重新启动 gs_ctl start -D /data/openGauss -l $GAUSSLOG/start.log ``` #### ⚙️ 预防措施: 1. **定期验证配置文件**: ```bash # 配置检查脚本 find $GAUSSHOME/share/config -type f -exec grep -Hn '^ *[^#]' {} \; ``` 2. **主机名解析监控**: ```bash # 添加监控项 echo "check_hosts: $(grep -c $(hostname) /etc/hosts)" >> /etc/cron.daily/check ``` 3. **核心转储分析自动化**: ```bash # 创建分析脚本 cat > /opt/scripts/analyze_core.sh <<EOF #!/bin/bash latest_core=\$(ls -t /opt/openGauss/corefile/core* | head -1) [ -f "\$latest_core" ] && gdb --batch -ex "bt" $GAUSSHOME/bin/gaussdb \$latest_core EOF ``` #### 📊 系统配置验证结果: | 配置项 | 当前值 | 推荐值 | 状态 | |--------|--------|--------|------| | `ulimit -n` | 1,000,000 | ≥65,535 | ✅ 正常 | | `file-max` | 2,000,000 | ≥500,000 | ✅ 正常 | | 主机名解析 | ❌ 失败 | 需IP映射 | ⚠️ 异常 | | 配置文件 | ❌ 损坏 | 完整 | ⚠️ 异常 | > 文件描述符限制已足够(当前100万 > 推荐6.5万),可排除FD资源不足问题[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值