• 让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优化方案)

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

  • 相关阅读:
    PAT 解题报告 1009. Product of Polynomials (25)
    PAT 解题报告 1007. Maximum Subsequence Sum (25)
    PAT 解题报告 1003. Emergency (25)
    PAT 解题报告 1004. Counting Leaves (30)
    【转】DataSource高级应用
    tomcat下jndi配置
    java中DriverManager跟DataSource获取getConnection有什么不同?
    理解JDBC和JNDI
    JDBC
    Dive into python 实例学python (2) —— 自省,apihelper
  • 原文地址:https://www.cnblogs.com/shanyou/p/2713389.html
Copyright © 2020-2023  润新知