• Linux系统调优方法


    1. 单进程最大打开文件数限制

      有时候会遇上socket/file: can‘t open so many files的问题,其实是Linux系统有文件句柄限制的,一般Linux系统限制单进程最大可以打开1024个文件,这是远远不能满足高并发需求的。

      通过ulimit –a命令来查看系统的一些资源限制情况:

    songguojundeMacBook-Pro:~ songguojun$ ulimit -a
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    file size               (blocks, -f) unlimited
    max locked memory       (kbytes, -l) unlimited
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 256
    pipe size            (512 bytes, -p) 1
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 709
    virtual memory          (kbytes, -v) unlimited

      将root启动的单一进程的最大可以打开的文件数设置为65535个。

    ulimit –n 65535

      如果系统回显类似于“Operationnotpermitted”之类的话,说明上述限制修改失败,实际上是因为在中指定的数值超过了Linux系统对该用户打开文件数的软限制或硬限制。因此,就需要修改Linux系统对用户的关于打开文件数的软限制和硬限制。

       第一步,修改limits.conf文件,并添加:

    # vim /etc/security/limits.conf
    
    * soft nofile 65535
    
    * hard nofile 65535

      其中'*'号表示修改所有用户的限制。soft或hard指定要修改软限制还是硬限制。65536则指定了想要修改的新的限制值,即最大打开文件数(请注意软限制值要小于或等于硬限制),修改完后保存文件。

    第二步,修改/etc/pam.d/login文件,在文件中添加如下行:

    # vim /etc/pam.d/login
    
    sessionrequired /lib/security/pam_limits.so

      这是告诉Linux系统在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。修改完后保存此文件。

    第三步,查看Linux系统级的最大打开文件数限制,使用如下命令:

    # cat/proc/sys/fs/file-max
    
    32568

      这表明这台Linux系统最多允许同时打开(即包含所有用户打开文件数总和)32568个文件,是Linux系统级硬限制,所有用户级的打开文件数限制都不应超过这个数值。通常这个系统级硬限制是Linux系统在启动时根据系统硬件资源状况计算出来的最佳的最大同时打开文件数限制,如果没有特殊需要,不应该修改此限制,除非想为用户级打开文件数限制设置超过此限制的值。修改此硬限制的方法是修改/etc/sysctl.conf文件内fs.file-max= 131072

      这是让Linux在启动完成后强行将系统级打开文件数硬限制设置为131072。修改完后保存此文件。

       完成上述步骤后重启系统,一般情况下就可以将Linux系统对指定用户的单一进程允许同时打开的最大文件数限制设为指定的数值。如果重启后用ulimit-n命令查看用户可打开文件数限制仍然低于上述步骤中设置的最大值,这可能是因为在用户登录脚本/etc/profile中使用ulimit-n命令已经将用户可同时打开的文件数做了限制。由于通过ulimit-n修改系统对用户可同时打开文件的最大数限制时,新修改的值只能小于或等于上次ulimit-n设置的值,因此想用此命令增大这个限制值是不可能的。所以,如果有上述问题存在,就只能去打开/etc/profile脚本文件,在文件中查找是否使用了ulimit-n限制了用户可同时打开的最大文件数量,如果找到,则删除这行命令,或者将其设置的值改为合适的值,然后保存文件,用户退出并重新登录系统即可。

      通过上述步骤,就为支持高并发TCP连接处理的通讯处理程序解除关于打开文件数量方面的系统限制。

     

     

    songguojundeMacBook-Pro:~ songguojun$ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    LAST_ACK 3
    CLOSE_WAIT 1
    TIME_WAIT 16
    ESTABLISHED 101

     

  • 相关阅读:
    基因数据分析主流软件与基因预测方法步骤-搬运工
    调用约定__cdecl __fastcall与__stdcall
    const用法体会
    NS3系列——eclipse + NS3环境搭建
    小div在大div里面水平垂直都居中的实现方法
    template.js插件和ajax一起使用的例子
    js获取时间的函数集
    ajax获取json数据及实现跨域请求
    JavaScript里的Date 对象属性及对象方法--实现简单的日历
    css单行文本及多行文本溢出显示省略号
  • 原文地址:https://www.cnblogs.com/songgj/p/14403077.html
Copyright © 2020-2023  润新知