Shell Limits设置问题导致用户不能登录

|  故障现象

前几天,突然间某数据库主机不能su切换到grid用户。

发生故障的环境为:RHEL 6.7,ORACLE 11gR2 RAC,其中集群节点1发生此故障,而节点2状态正常。

故障现象如下:

本地节点从oracle用户su到grid用户,错误如下:
[oracle@node1 /home/oracle]$su - grid
su: cannot set user id: Resource temporarily unavailable
通过集群中的另外一个节点错误提示如下:
[grid@node2:/home/grid]$ssh node1
Write failed: Broken pipe
[oracle@node2:/home/oracle]$ssh node1
Last login: Thu May 10 12:28:22 CST 2018
而oracle用户正常
通过远程连接工具使用grid用户登录错误提示如下:
Connection closed by foreign host.
/var/log/secure报错如下:
su: pam_keyinit(su-l:session): Unable to change UID to 500 temporarily
su: pam_keyinit(su-l:session): Unable to change UID to 500 temporarily

| 故障分析

参考MOS文档号:1174073.1,可能是limits设置不合理导致的,而Shell Limits会限制用户资源的使用。

同时根据文档788064.1,进行如下步骤诊断:

1. 查看集群状态,数据库状态以及相关日志信息。

检查结果:除了上述现象外,集群状态正常,数据库告警日志此段时间内没有任何错误,数据库中也没有发现异常的等待,客户的业务也正常。

2. 查看用户的进程数。

[oracle@node1 /home/oracle]#ps -u grid -L |wc -l
1560

3. 查看用户打开文件数。

[oracle@node1 /home/oracle]$ lsof -u grid | wc -l
4000

上述结果表明:当前环境中打开文件数较多,而通过检查用户的进程,并没有发现有异常的程序。那极有可能就是设置的limits过小导致。

4. 检查/etc/security/limits.conf,查看grid用户的nproc和nofile设置。

[grid@node1 /home/oracle]$cat /etc/security/limits.conf
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - an user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open files
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#
#<domain>      <type>  <item>         <value>
grid        soft        nproc   2048
grid        hard    nproc   4096
grid        soft        nofile  2048
grid        hard    nofile  4096
……

/etc/security/limits.conf文件为每个用户设置系统资源的限制。从以上输出:从该设置和结合之前查询结果来看,当前nproc和nofile这两个值设置得太小。这两个参数设置除需参照Oracle建议值外还需考虑是否符合实际环境。

|  解决方案

根据上述分析中得出:由于设置的nproc和nofile值太小而导致,因此需要修改这两个值。

1.手动修改/etc/security/limits.conf中的设置。

这两个值设置参考系统本身的资源情况以及业务情况。因此暂定该环境修改值如下:

[grid@node1 /home/oracle]$cat /etc/security/limits.conf
grid        soft        nproc   16384
grid        hard    nproc   16384
grid        soft        nofile  16384
grid        hard    nofile  16384

注:可以使用官方提供的oracle-validated包来修改/etc/security/limits.conf,这个包提供修改内核参数,用户limits等。该RPM包可以从http://oss.oracle.com网站获取。如果是运行在OL6/RHEL6中的Oracle database 11gR2该包名被替换为 oracle-rdbms-server-11gR2-preinstall。

2.检查故障是否存在。

[oreacl@node1 /home/oracle]#su – grid
Password:
Last login: Thu May 10 13:28:22 CST 2018

通过oracle用户再次切换到grid用户时恢复正常。

3.查看用户limits。

[grid@node1:/home/grid] $ ulimit -Su
16384
[grid@node1:/home/grid] $ ulimit -Hu
16384
[grid@node1:/home/grid] $ ulimit –Sn
16384
[grid@node1:/home/grid] $ ulimit -Hn
16384

修改之后grid用户的nproc和nofile为最新值。

4.附录:当达到其他limits设置时出现的不同错误。

 A. 当达到’open files’限制时错误。

[oracle@node1 /home/oracle]$ssh node1
oracle@node1's password:
-bash: ulimit: max user processes: cannot modify limit: Operation not permitted
-bash: /home/oracle/.bash_profile: Too many open files

B.当达到’max user processes’限制时错误。

[oracle@node1 /home/oracle]$ssh oracle@node1
oracle@node1's password:
-bash: ulimit: open files: cannot modify limit: Operation not permitted
-bash: fork: Resource temporarily unavailable

|  作者简介

杨波,沃趣科技数据库技术专家 主要参与公司产品实施、测试、维护以及优化。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

服务器进程异常的原因分析(第二篇)(r8笔记第16天)

最近看到一个报警,是显示某一个oracle的备库进程数达到了2000多个。 ZABBIX-监控系统: ----------------------------...

2817
来自专栏帘卷西风的专栏

关于linux系统端口查看和占用的解决方案

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)

702
来自专栏杨建荣的学习笔记

crontab导致CPU异常的问题分析及处理(r3笔记第100天)

今天查看数据库负载没有发现问题,但是当我使用top命令的时候,发现有一个进程占用了大量的cpu资源而且已经执行很长时间了。这一下子引起了我的注意。 PID ...

3477
来自专栏云计算教程系列

如何使用LVM快照将MySQL数据库备份到腾讯云COS

定期数据库备份是防止意外数据丢失事件的关键步骤。设计有效的备份和恢复策略通常需要通过恢复速度,数据完整性和备份覆盖来权衡性能影响,实施成本和数据存储成本。最佳解...

1102
来自专栏PPV课数据科学社区

工具 | 大数据系列(3)——Hadoop集群完全分布式坏境搭建

文|指尖流淌 前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一...

3326
来自专栏北京马哥教育

Puppet基于Master/Agent模式实现LNMP平台部署

前言 随着IT行业的迅猛发展,传统的运维方式靠大量人力比较吃力,运维人员面对日益增长的服务器和运维工作,不得不把很多重复的、繁琐的工作利用自动化处理。前期我们介...

37210
来自专栏james大数据架构

如何开发自己的搜索帝国之Elasticsearch

搜索引擎是什么?   搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示...

2017
来自专栏格子的个人博客

CentOS7下安装Mesos教程

Mesos是根据Linux内核相同原则而创建的,而不同点仅是在于抽象的层面。Mesos内核运行在每一个机器上,同时通过 API 为各种应用提供跨数据中心和云的资...

822
来自专栏Vamei实验室

Linux文件管理相关命令

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 在了解了Linux文件管理背景知识之后, ...

1885
来自专栏菩提树下的杨过

负载均衡环境下的web服务器处理

负载均衡设备允许把一台web server轻易扩展成web server集群(前提是所有的web server必须配置完全相同),有访问请求时,该设备会把该请求...

1766

扫码关注云+社区