ulimit: open files: cannot modify limit: Operation not permitted

      在从root用户切换到oracle用户时,碰到了ulimit: open files: cannot modify limit: Operation not permitte的提示信息。字面意思来看即是打开文件受到了限制。同一服务器上,如仅有一个Oracle单实例且数据文件较少的情形应该不会出现该情形。多实例可能会碰到这个情况。由于多个实例都为Oracle用户所有,因此Oracle用户可操作的文件数为所有实例文件数的总和,超出了限制就收到错误提示。

1、故障描述 --在从root切换到oracle时,出现提示 oracle@v2013db02u:/u02/database> su - oracle Password: -bash: ulimit: open files: cannot modify limit: Operation not permitted -bash: ulimit: open files: cannot modify limit: Operation not permitted

a、查看limits.conf配值文件 oracle@v2013db02u:~> more /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 #        - 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 #        - rtprio - max realtime priority # #<domain>      <type>  <item>         <value> #

#*               soft    core            0 #*               hard    rss             10000 #@student        hard    nproc           20 #@faculty        soft    nproc           20 #@faculty        hard    nproc           50 #ftp             hard    nproc           0 #@student        -       maxlogins       4

# End of file

--limits.conf文件的注释信息给出了很好的描述信息,也即是我们可以基于用户或者组来配置soft及hare方面不同的item --soft即是软限制,hard是硬限制。用户可以超过soft设置的值,但一定不能超过hard 的值。一般soft比hard小 --上面的这个文件中并未为Oracle用户配值任何信息,且通配符*也被注释了 --由于该服务器为一个新的UAT服务器,Oracle software为Infra安装并配置。从上可知,应该是Infra忘记或忽略了配值该文件 --在数据库实例较少且打开的文件数不多的情形则没有任何问题,随着上面运行的实例增大,现象随之出现

--下面查看一下当前用户的资源分配限制 --对于资源限制,也可以使用ulimit 指令,用来限制用户的资源分配,比如打开文件数,最多进程数,CPU的使用时间 --可以使用指令ulimit -a来查看当前用户的各项limit限制(ulimit用法: man ulimit)

b、查看当前用户的资源限制 oracle@v2013db02u:~> ulimit -a core file size          (blocks, -c) 0 data seg size           (kbytes, -d) unlimited file size               (blocks, -f) unlimited pending signals                 (-i) 540672 max locked memory       (kbytes, -l) 32 max memory size         (kbytes, -m) unlimited open files                      (-n) 1024        -->这里限制了打开的文件数为1024,明显不够 pipe size            (512 bytes, -p) 8 POSIX message queues     (bytes, -q) 819200 stack size              (kbytes, -s) 8192 cpu time               (seconds, -t) unlimited max user processes              (-u) 16384 virtual memory          (kbytes, -v) unlimited file locks                      (-x) unlimited

2、解决办法 a、直接修改limits.conf配值文件,且使得永久生效 --修改文件/etc/security/limits.conf,添加 v2013db02u:~ # echo " > oracle soft nproc 16384 > oracle hard nproc 16384 > oracle soft nofile 65536 > oracle hard nofile 65536 > oracle soft memlock 4000000 > oracle hard memlock 4000000 > " >> /etc/security/limits.conf

v2013db02u:~ # tail /etc/security/limits.conf

# End of file oracle soft nproc 16384 oracle hard nproc 16384 oracle soft nofile 65536 oracle hard nofile 65536 oracle soft memlock 4000000 oracle hard memlock 4000000

--Author : Robinson --Blog   : http://blog.csdn.net/robinson_0612

--说明上面的配置中,为oracle用户配置了 --nproc:用户可用的最大进程数量 --nofile:用户可打开的最大文件总数 --memlock: 用户最大内存锁地址空间

v2013db02u:~ # su - oracle   -->再次切换到oracle用户,未出现之前的错误提示。配值后建议重启一下服务器 v2013db02u:~ # su - oracle oracle@v2013db02u:~> ulimit -a core file size          (blocks, -c) 0 data seg size           (kbytes, -d) unlimited file size               (blocks, -f) unlimited pending signals                 (-i) 540672 max locked memory       (kbytes, -l) 4000000 max memory size         (kbytes, -m) unlimited open files                      (-n) 63536 pipe size            (512 bytes, -p) 8 POSIX message queues     (bytes, -q) 819200 stack size              (kbytes, -s) 8192 cpu time               (seconds, -t) unlimited max user processes              (-u) 16384 virtual memory          (kbytes, -v) unlimited file locks                      (-x) unlimited

b、使用ulimit命令来修改 --在使用ulimit命令方式来修改的话,当服务器被重启后会失效(临时性更改) --ulimit 用于限制 shell 启动进程所占用的资源 --支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell进程创建文件的大小、内存锁住的大小、常驻内存集的大小 --以及打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存 --以及支持硬资源和软资源的限制

oracle@v2013db02u:~> ulimit -n 60000                  -->使用当前用户来修改,即oracle用户,我们将其改为60000 oracle@v2013db02u:~> ulimit -a | grep "open files"    -->可以看到该资源限制已经被修改 open files                      (-n) 60000 oracle@v2013db02u:~> cat /etc/security/limits.conf | grep nofile   -->但配值文件并未发生任何变化 oracle  soft    nofile  1024 oracle hard    nofile   65536

oracle@v2013db02u:~> ulimit -n 65537      -->尝试修改到大于65536,收到错误提示 -bash: ulimit: open files: cannot modify limit: Operation not permitted

oracle@v2013db02u:~> ulimit -n 65535      -->使用ulimit命令时,number的值不能大于配值文件中hard的值 oracle@v2013db02u:~> ulimit -a | grep "open files"   open files                      (-n) 65535

--其余参数都可以按上述方式依法炮制

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏葡萄城控件技术团队

使用 PowerShell 自动化 CloudServices 发布

在软件的开发过程中,自动化的编译和部署能够带来很多的优势。如果可以通过一个脚本实现软件的自动化部署,那么就可以节省大量的时间去做其它事情。 下面介绍如何将云应用...

23470
来自专栏互扯程序

玩转linux 这些命令就够了

现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。

21220
来自专栏Golang语言社区

Golang语言--日志库glog解析

glog简介 glog是著名的google开源C++日志库glog的golang版本,glog是一个轻量级的日志库,上手简单不需要配置文件并且稳定高效,但是可以...

55160
来自专栏土豆专栏

Java面试之Linux常用命令

原作者:https://www.cnblogs.com/yjd_hycf_space/p/7730690.html

17710
来自专栏idba

一款基于go语言的agent

一 介绍 在构建数据库自动化运维系统的时候,数据库服务器上必须要有一个agent来执行web服务器端发起的命令,我们研究了好几种技术Celery,Redis ...

22300
来自专栏IT技术精选文摘

Redis与Memcached的区别

本文我们将探讨 Redis (远程字典服务器). Redis是一个开源的、内存型的键值存储。它也被看作为一个字典型的数据结构服务器,因为它的键值不仅仅是字符串,...

39250
来自专栏代码世界

Linux常用命令大全

27190
来自专栏积累沉淀

Linux常用命令大全

系统信息  arch 显示机器的处理器架构(1)  uname -m 显示机器的处理器架构(2)  uname -r 显示正在使用的内核版本  dmide...

269100
来自专栏Golang语言社区

select多路选择的模拟实现

有时候有这样一种应用场景:需要等待多个事件到达,然后返回尽可能多的事件;如果没有事件到达就阻塞等待。例如服务器等待客户端建立连接,或者等待客户端数据等就有这种应...

33250
来自专栏青玉伏案

Swift3.0服务端开发(四) MySQL数据库的连接与操作

本篇博客我们来聊聊MySQL数据库的连接与操作。如果你本地没有MySQL数据库的话,需要你先安装MySQL数据库。在Mac OS中使用brew包管理器进行MyS...

21880

扫码关注云+社区

领取腾讯云代金券