• 让Jexus支持高并发请求的优化技巧


    Jexus web server 5.1 每个工作进程的最大并发数固定为1万,最多可以同时开启4个工作进程,因此,每台Jexus V5.1服务器最多可以到支持4万个并发连接。但是,按照linux系统的默认设定,linux是不能支持这么高的并发请求的,只有对linux进行一些必要的优化,才能达到让Jexus支持大并发的目的。
    一、调整文件描述符数量限制
    linux默认文件描述符只有1024个,对于Jexus 等一些服务来说,在大负载的情况下这点文件描述符是远远不够的,因为Jexus 的工作方式,文件描述符的限制可能会极大的影响性能。当Jexus用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。直到一部分当前请求完成,相应的文件和socket 被关闭,Jexus 不能接收新请求,这样就要扩大linux的文件描述符了。

    编辑 /etc/security/limits.conf,更改或添加入如下内容:
    * soft nofile 20000
    * hard nofile 20000

    limits.conf 文件实际是 Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so 的配置文件,而且只针对于单个会话。

    limits.conf的格式如下:

    username|@groupname type resource limit

    username|@groupname:设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有用户的限制。

    type:有 soft,hard 和 -,soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值。soft 的限制不能比hard 限制高。用 - 就表明同时设置了 soft 和 hard 的值。

    resource:

    core - 限制内核文件的大小

    date - 最大数据大小

    fsize - 最大文件大小

    memlock - 最大锁定内存地址空间

    nofile - 打开文件的最大数目

    rss - 最大持久设置大小

    stack - 最大栈大小

    cpu - 以分钟为单位的最多 CPU 时间

    noproc - 进程的最大数目

    as - 地址空间限制

    maxlogins - 此用户允许登录的最大数目

    要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中有:

    session required /lib/security/pam_limits.so
    二、调整网络参数
    Sysctl是一个允许您改变正在运行中的Linux系统的接口。它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高系统性能。用sysctl可以读取设置超过五百个系统变量。

    查看所有可读变量:

    % sysctl -a

    读一个指定的变量,例如 kern.maxproc:

    % sysctl kern.maxproc kern.maxproc: 1044

    要设置一个指定的变量,直接用 variable=value 这样的语法:

    # sysctl kern.maxfiles=5000

    kern.maxfiles: 2088 -> 5000

    您可以使用sysctl修改系统变量,也可以通过编辑sysctl.conf文件来修改系统变量。sysctl.conf 看起来很像 rc.conf。它用 variable=value 的形式来设定值。指定的值在系统进入多用户模式之后被设定。并不是所有的变量都可以在这个模式下设定。

    sysctl 变量的设置通常是字符串、数字或者布尔型。 (布尔型用 1 来表示’yes’,用 0 来表示’no’)。

    编辑“/etc/sysctl.conf”,更改或添加如下内容:
    net.core.somaxconn=8192
    net.ipv4.tcp_syncookies=1
    net.ipv4.tcp_tw_reuse=1
    net.ipv4.tcp_tw_recycle=1
    net.ipv4.tcp_fin_timeout=30
    net.ipv4.tcp_keepalive_time=1200
    net.ipv4.ip_local_port_range = 1024 65000
    net.ipv4.tcp_max_tw_buckets = 5000
    net.ipv4.tcp_max_syn_backlog=8192
    net.ipv4.tcp_max_tw_buckets=10000
    如果启用了iptables防火墙并加载了ip_conntrack模块,还需加入:
    net.ipv4.ip_conntrack_max = 10240
    注:ubuntu是“net.ipv4.netfilter.ip_conntrack_max”。
    上述参数修改完成后,请用"sysctl -p" 命令使其生效。

    几个解释:
    net.ipv4.tcp_syncookies = 1
    #表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
    net.ipv4.tcp_tw_reuse = 1
    #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
    net.ipv4.tcp_tw_recycle = 1
    #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
    net.ipv4.tcp_fin_timeout = 30
    #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
    net.ipv4.tcp_keepalive_time = 1200
    #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
    net.ipv4.ip_local_port_range = 1024 65000
    #表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
    net.ipv4.tcp_max_tw_buckets = 10000
    #表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,
    #TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为10000 。
    #对于Apache、Nginx、Jexus 等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量
    三、整调Jexus工作进程数
    Jexus默认工作进程数为1,为了支持更大的并发数量,应根据服务器CPU内核数量及内存大小,合理调整工作进程数量。方法是,编辑 jws.conf,去掉“httpd.processes”项前边的“#”号,把进程数填写到等号右边(Jexus v5.1版最大值不超过4)。
    注:
    1)进程数与cpu的总核数有关,建议8核以内设为2,16核设为3,更多内核数就设为4。
    2)进程数还与服务内存及WEB应用所占内存的多少有关,建议每个工作进程平均内存可用量不低于512M。
    四、mono版本选择
    建议使用mono最新的成熟版本。

    原文地址:http://linuxdot.net/bbsfile-3125 

    相关文章:

    linux文件描述符导致squid拒绝服务

    设置Sysctl.conf用以提高Linux的性能(最完整的sysctl.conf优化方案)

    欢迎大家扫描下面二维码成为我的客户,为你服务和上云

  • 相关阅读:
    jsoncpp使用
    java学习笔记12--国际化
    java学习笔记13--比较器(Comparable、Comparator)
    java学习笔记15--引用传递
    java学习笔记16--异常
    Java学习笔记——File类之文件管理和读写操作、下载图片
    java学习笔记3
    我的二十一天CoreJava 学习笔记
    大数据处理方面的 7 个开源搜索引擎
    GridView编辑删除操作
  • 原文地址:https://www.cnblogs.com/shanyou/p/2713389.html
Copyright © 2020-2023  润新知