ulimit: open files: cannot modify limit: Operation not permitted_五岳山的博客-程序员宝宝

技术标签: linux  

原地址:http://blog.csdn.net/leshami/article/details/8749773

      在从root用户切换到oracle用户时,碰到了ulimit: open files: cannot modify limit: Operation not permitte的提示信息。字面意思来看即是打开文件受到了限制。同一服务器上,如仅有一个Oracle单实例且数据文件较少的情形应该不会出现该情形。多实例可能会碰到这个情况。由于多个实例都为Oracle用户所有,因此Oracle用户可操作的文件数为所有实例文件数的总和,超出了限制就收到错误提示。
 
1、故障描述
--在从root切换到oracle时,出现提示
[email protected]:/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配值文件
[email protected]:~> 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、查看当前用户的资源限制
[email protected]:~> 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
[email protected]:~> 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 进程所能使用的最大虚拟内存
--以及支持硬资源和软资源的限制
[email protected]:~> ulimit -n 60000                  -->使用当前用户来修改,即oracle用户,我们将其改为60000
[email protected]:~> ulimit -a | grep "open files"    -->可以看到该资源限制已经被修改
open files                      (-n) 60000
[email protected]:~> cat /etc/security/limits.conf | grep nofile   -->但配值文件并未发生任何变化
oracle  soft    nofile  1024
oracle hard    nofile   65536
[email protected]:~> ulimit -n 65537      -->尝试修改到大于65536,收到错误提示
-bash: ulimit: open files: cannot modify limit: Operation not permitted
[email protected]:~> ulimit -n 65535      -->使用ulimit命令时,number的值不能大于配值文件中hard的值
[email protected]:~> ulimit -a | grep "open files"   
open files                      (-n) 65535
--其余参数都可以按上述方式依法炮制
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wuyueshan27/article/details/14442973

智能推荐

C++ vector的用法小结_adrianna_xy的博客-程序员宝宝

这篇文章主要介绍了c++中,vector是一个十分有用的容器,下面对这个容器做一下总结c++ vector用法C++内置的数组支持容器的机制,但是它不支持容器抽象的语义。要解决此问题我们自己实现这样的类。在标准C++中,用容器向量(vector)实现。容器向量也是一个类模板。标准库vector类型使用需要的头文件:#include 。vector 是一个类模

C++数组相关的知识点梳理_缘不可强求的博客-程序员宝宝_c++数组的知识点

最近将C++中的知识点整理了下,后续还会有其他的知识点更新。数组可以先声明再赋值,也可以再声明时对该数组进行赋值。数组是一种数据格式,能够存储多个同类型的值。数组的声明应指出以下三点:●存储在每个元素中的值的类型●数组名●数组中的元素的个数声明数组的通用格式如下:typeName arrayName[arraySize]; //typeName 数组要存储的元素的类型//ar...

Ext.XTemplate 模板_dahuzix的博客-程序员宝宝

本篇将涉及到ExtJs中一个重要的概念,模板。话说Razor很神奇,但是我个人不是很喜欢那种html混编C#的方式,仿佛又回到了asp的时代。ExtJs的模板同样也可以组织生成灵活的html,而且代码和html有效的分离。本文将细细分析ExtJs模板的用法。行文之前我先把公共的html和用到的js数据贴在前面,后面的代码都要引用到。[html] 使用标签tpl和操作符fo

Edit Control 控件属性 添加消息 [大三TJB_708]_资质平庸的程序员的博客-程序员宝宝

开发环境:Visual Studio 2010应用程序:MFC Application笔记主要包含Edit Control控件的常用设置、多个Edit Control控件输入时单独判断当前输入控件的内容是否符合要求、Edit Control控件对应的一些消息宏。 1 Edit Control常用属性设置        MFC中很多控件的常用功能都是可以通过选中相应的控件然后设置

力扣----删除链表的倒数第N个节点_微笑向暖_li的博客-程序员宝宝

题目要求:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1-&gt;2-&gt;3-&gt;4-&gt;5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1-&gt;2-&gt;3-&gt;5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?解题思路:方法一:两次遍历算法:首先分析问题,问题可以简化为:删除从...

makefile学习1:初识makefile_天泉证道的博客-程序员宝宝

大材小用一下,下面给一个源文件写makefile,认识一下makefile的依赖性。源代码:#include "std.h"int main(int argv,char **argc){ int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int i = 0; for(;i &lt; 10;i++) { printf("%d\n",arr[i])...

随便推点

JAVA 给图片添加水印_wjwisme的博客-程序员宝宝_java 图片批量添加水印

现在网络上的图片,为了防止其他人盗用,可以添加水印,比如我用csdn写博文,他就会自动给我上传的图片添加水印。前段时间写过一篇  JAVA 绘制验证码图像及解决黑色背景问题   ,在这篇的基础上,理解添加水印的功能更加容易。先上代码示例:/***** * 给图片添加文字水印 * @author wjw * */public class ImageUtils { pub

本地 robo3t 使用 ssh key 连接阿里云远程 mongodb 的 正确配置_什么香香脆脆我们最爱的博客-程序员宝宝

robo3t 版本:mongodb 版本:处于安全考虑,一般只允许内网 和本地访问数据库。但是 我的服务器买的是阿里云的,所以只能通过外网访问。(忽略阿里云控制台远程连接,这里说的是 本地数据 gui 工具)本地访问外网数据有2种方式:① 配置固定ip (配置0.0.0.0 是及其危险的操作),开启 27017端口 ② 通过ssh 密匙 访问 和 22 端口访问服务器,再由服务器本地...

elasticsearch基本操作_我就是个菜鸟2021的博客-程序员宝宝_elasticsearch 基本操作

ES 简介Elasticsearch 是基于Apache Lucene的开源分布式(全文)搜索引擎,,提供简单的RESTful API来隐藏Lucene的复杂性。ES 和 传统数据库对比传统数据库Elasticsearchdatabase(库)index(索引)table (表)ducument(文档)column(列)feild(属性)docker 下 安装 es 和 kibanaes 安装docker run -d -e ES_JAVA_POTS="

java 6 7 兼容_关于java:JDK 7类文件向后兼容JDK 6_036015的博客-程序员宝宝

JDK 7的哪些功能(不包括invokedynamic,因为它不被java使用)导致新的类文件版本不符合JDK 6.它表明所有功能都可以由生成粘合代码的编译器实现。 例如,switch语句中的String可以使用编译器生成的重复ifeq语句来实现。 我希望能够为编译器提供-source 1.7 -target 1.6标志以符合jre 6,同时在jdk 7中使用项目硬币功能。如果你用javap查看字...

Swift会取代Python吗?对初学者是否更适合学习Swift?答案在这里_冠亦Python的博客-程序员宝宝_swift和python

Swift会取代Python吗?也许我现在不会相信,至少从目前来讲,Python依然是目前世界上发展最快的语言。并且该语言的应用范围十分的广泛,无论是web开发、爬虫、数据分析、机器学习等,所以,它也被人称为最灵活的语言。尤其是在数据领域或者金融科技行业,Python岗位的需求是Java的两倍多,这都得益于Python的速度和算法性能。可说,该语言除了不适用于前端,几乎可以在任意领域驰骋。什么是SwiftSwift是由Chris Lattner在苹果工作时创建,并且该团队被称为世界上最先进的人

关于project server 2016 定制开发_我是成果啊的博客-程序员宝宝

对于project server的开发相信点开这个帖子的人都知道PS 2013 和它以下的版本都是可以通过 project server interface 俗称(PSI)是可以完成需求的,但是project server 2016 用不了PSI,在MSDN上面给到的回复是用CSOM来完成project server 2016的开发。下面就来介绍一下CSOM:首先引用projectserv

推荐文章

热门文章

相关标签