zoukankan      html  css  js  c++  java
  • ubuntu下执行ulimit返回“不允许的操作”,问题解决思路

    在ubuntu下执行ulimit,希望修改允许的最大打开文件数,但返回“不允许的操作”。

    使用ulimit -a查看当前配置

    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 127837
    max locked memory       (kbytes, -l) 16384
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 1024
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 127837
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited  
    

     一通搜索后,先使用如下解决办法,修改/etc下的文件,通过修改/etc/security/limits.conf这个配置文件来改变系统的默认限制。在文件的末尾追加一下内容:

    * soft nofile 81920
    * hard nofile 81920
    

     *代表除root以外的所有用户,也可以设置为特定用户的名称,soft表示软限制,nofile表示文件描述符,81920是新的默认值。

    如果需要修改root,需要专门指定 root soft nofile xxx

    重启系统后,root已经生效,而普通用户的终端依然没有生效,查找资料,系统的相关修改,修改办法如下:

    系统级别的限制

    上面说到修改只对与某一个用户有效,Linux还有系统级别的文件描述符的限制,用户级别的设置是不能超过系统级别的。修改系统级的限制可以通 过sysctl命令修改:

    1
    
    sysctl -w fs.file-max=1000000
    

    file-max代表系统内核最多可以打开的文件描述符数量,如果要设置某个进程可以打开的文件描述符数量,可以通过修改nr_open:

    1
    
     sysctl -w fs.nr_open=1000000
    

    使用sysctl命令所做的修改也是临时的,要永久修改系统的限制可以通过修改/proc/sys/fs/下的文件:

    1
    2
    
    echo '1000000' > /proc/sys/fs/file-max
    echo '1000000' > /proc/sys/fs/nr_open
    

    关于/proc/sys/fs/目录下各个文件的详细解释,可以阅读这篇文章fs.txt

     然而是不相关的啊

    最终看到有这么一句提到

    PS: ,有时候更改完后使用ulimit -SHn时仍然会报错,这是需要在/etc/pam.d/common-session中加入session required pam_limits.so 再次PS ,有时候经过上面的更改后使用ulimit -n会看到默认值并没有改变,我在ubuntu中遇到这种情况,解决办法是先使用su username登录当前用户,然后 就可以使用ulimit命令了。原因可能是gnome terminal默认是none-login的,所以我们在配置文件中的修改并没有影响到当前的terminal。

    在ubuntu的终端su username,输入密码后,看到默认值已经修改成正确的了。

    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 127837
    max locked memory       (kbytes, -l) 16384
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 81920
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 127837
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited

    …………………………………………完

  • 相关阅读:
    MVC4新功能...压缩和合并js文件和样式文件
    如何将sqlserver表中的数据导出sql语句或生成insert into语句 [转]
    利用svn自动同步更新到网站服务器 -- 网摘
    找不到方法: Int32 System.Environment.get_CurrentManagedThreadId() .
    C# .NET ASP.NET 其中关系你了解多少
    SQL语句分享[不定期更新]
    云平台概念学习
    【转】用户画像和用户档案的区别
    【转】外行杂谈论—聊聊看板 vs 大屏的区别
    【转】从信息、能量、物质的角度揭示生命真相
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/10161588.html
Copyright © 2011-2022 走看看