zoukankan      html  css  js  c++  java
  • Mac OSX下修改 ulimit 参数

    OSX下Leopard, Yosemite版本的操作系统下, 修改 ulimit 命令默认的程序是 launchd.
    默认的ulimit命令继承自launchd, 默认的limits参数如下:

    daviddeMacBook-Pro:etc david$ sudo launchctl limit
    Password:
      cpu         unlimited      unlimited      
      filesize    unlimited      unlimited      
      data        unlimited      unlimited      
      stack       8388608        67104768       
      core        0              unlimited      
      rss         unlimited      unlimited      
      memlock     unlimited      unlimited      
      maxproc     709            1064           
      maxfiles    256            unlimited



    如果因为如socket连接数过小等原因, 需要修改ulimit相关参数, 可以按照如下方式操作:
    1.在 /etc/launchd.conf(如无, 需用拥有root权限的账户创建) 文件中, 增加这一行:

    echo "limit maxfiles 65535 unlimited" | sudo tee -a /etc/launchd.conf
    tee命令是等待用户输入, 并将输入写入到指定文件中, -a参数表示添加方式为"追加".


    2.在本次会话中, lanuchd 命令已经启动了; 如果想让配置在任何用户任何会话中都生效, 最简单的方式就只需要重启一下server.
    如果还需要修改其他参数, 只需要使用 >> 命令追加到 /etc/launchd.conf文件中即可.
    注:

    1.上面

    65535 unlimited

    这2个参数即是设置soft和hard值.

    2.Linux发行版redhat/centos配置与osx不同,如下:

    vi /etc/security/limits.conf
    # noproc进程数,nofile文件打开数
    # soft软限制, 在程序的进程中可自行改变.
    # hard硬限制, 程序不可随意改变,除非有root权限.
    * soft noproc 11000
    * hard noproc 11000
    * soft nofile 4100
    * hard nofile 4100

    超过系统最大文件打开数之后,系统报 too many open files

    1.查看限制:

    ulimit -a

    2.创建新的配置文件,配置系统打开最多文件限制(如果没有的话)

    sudo vi /Library/LaunchDaemons/limit.maxfiles.plist
    内容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
        <dict>
          <key>Label</key>
            <string>limit.maxfiles</string>
          <key>ProgramArguments</key>
            <array>
              <string>launchctl</string>
              <string>limit</string>
              <string>maxfiles</string>
              <string>655360</string>
              <string>655360</string>
            </array>
          <key>RunAtLoad</key>
            <true/>
          <key>ServiceIPC</key>
            <false/>
        </dict>
      </plist>

    3.创建每个最大进程数限制的配置文件

    sudo vi /Library/LaunchDaemons/limit.maxproc.plist
    内容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple/DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
        <dict>
          <key>Label</key>
            <string>limit.maxproc</string>
          <key>ProgramArguments</key>
            <array>
              <string>launchctl</string>
              <string>limit</string>
              <string>maxproc</string>
              <string>2048</string>
              <string>2048</string>
            </array>
          <key>RunAtLoad</key>
            <true />
          <key>ServiceIPC</key>
            <false />
        </dict>
      </plist>


    4.以上两个文件 需要owned by root:wheel

    chown root:wheel /Library/LaunchDaemons/limit.maxproc.plist
    chown root:wheel /Library/LaunchDaemons/limit.maxproc.plist
    读写权限:-rw-r--r--

    执行 ulimit -a
    下面的参数应该是MacOS的默认参数

    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


    5.执行launchctl limit是配置生效。也许需要重启电脑(本人系统需要, OS X 10.10.3)

    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) 655360
    pipe size               (512 bytes, -p) 1
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 2048
    virtual memory          (kbytes, -v) unlimited

    6.打开端口后限制
    查看socket端口范围限制
    sysctl -a | grep port

    kern.ds_supgroups_supported: 1

    kern.ipc_portbt: 0

    kern.hv_support: 1

    vfs.generic.nfs.client.callback_port: 0

    vfs.generic.nfs.server.require_resv_port: 0

    vfs.generic.nfs.server.export_hash_size: 64

    net.inet.ip.portrange.lowfirst: 1023

    net.inet.ip.portrange.lowlast: 600

    net.inet.ip.portrange.first: 1024

    net.inet.ip.portrange.last: 65535

    net.inet.ip.portrange.hifirst: 49152

    net.inet.ip.portrange.hilast: 65535

    net.inet.tcp.randomize_ports: 0

    net.inet.udp.randomize_ports: 1

    net.inet.ipsec.esp_port: 4500

    machdep.misc.fast_uexc_support: 1

       
    系统默认端口打开范围大小只有大概1500个,
    修改办法:
    打开(没有就创建)文件 /etc/sysctl.conf

    sudo vi  /etc/sysctl.conf

    添加以下两行:

    net.inet.ip.portrange.first=1024
    net.inet.ip.portrange.last=65535


    第一行指定最小端口,低于1024的端口,系统预留,部分已经默认分配给常见应用了。一般需要root才能分配这低于1024的端口范围,不建议使用,除非你知道你在做什么。
    第二行最大只能到达65535=2^16 -1。因为ipv4端口只占16bits,因此最大只能到达65535。

    因此一个客户端,配置一个ipv4地址,能够创建的最大连接数为65535-1024=64511。

    如何使用mac os 创建连接测试服务器,考虑带其他应用程序占用的端口,一般配置最大创建64000个连接,基本到达系统最大限制了。
    ————————————————
    版权声明:本文为CSDN博主「明明很忙」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/mingtingjian/article/details/77675761

  • 相关阅读:
    性能测试分类
    monkey命令选项参考
    Hibernate三种状态
    Hibernate 的延迟加载
    JAVA2的三个版本
    缓存
    队列、生产消费模型.html
    socketserver剖析.html
    socketserver 之 recv(1024) 问题!
    粘包问题
  • 原文地址:https://www.cnblogs.com/lyonwu/p/12117024.html
Copyright © 2011-2022 走看看