请输入
菜单

2、高并发调优

高并发调优

1 前言

目前轻量级服务的应用是基于EMAP架构开发,Java容器为weblogic,JDK1.6,EMAP底座版本为B159/B203。

编写此文档的目的是用于解决高并发应用场景时,轻量级服务如何保障高可用,不存在性能、宕机等问题。

目前轻量级服务出现高并发的应用有学生体温上报、教职工健康打卡、校内电子通行证等应用,出现高并发场景的学校有电子科技大学、东南大学、海南大学、北京体育大学、重庆大学,根据以上几个学校在运行时的监控和问题排查所总结出的经验,整理出此文档以便于类似的服务可根据以下内容做出相应的调整,来保障服务的可用性。

2  硬nginx.conf中件要求

用途

服务器配置

并发数

备注

1

IDS

内存:16G

CPU:8核

网络:1000M

操作系统:OpenEuler-22.03-SP2

中间件:weblogic、redis

IDS6:750

IDS7:1000

IDS6与7的差异比较大,以实际部署的版本为准

 

2

AMP

内存:12G

CPU:2核

网络:1000M

操作系统:OpenEuler-22.03-SP2

中间件:weblogic

500

 

3

轻服务服务器

内存:8G

CPU:8核

网络:1000M

操作系统:OpenEuler-22.03-SP2

中间件:weblogic

500

单节点部署,weblogic共享整个服务器的所有资源

 

3 运行环境优化

3.1 Nginx调优

● 限流

打开nginx里的配置文件“conf”,将以下配置在server节点之上

修改版:

1.nginx.conf中

limit_req_zone:定义到http区域:

或者如图:

2.casp_http.conf下配置

3.或者按照下面的方式配置,根据现场nginx判断

server {

            listen 80;

            server_name ehall.xxx.edu.cn;

            limit_req_zone $binary_remote_addr zone=qljfwappLimit:20m rate=100r/s;

}

zone=qljfwappLimit:20m表示生成一个大小为20M,名字为qljfwappLimit的内存区域,用来存储访问的频次信息。
$binary_remote_addr 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址。

rate=100r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒100次,还可以有比如1000r/m的。

这个参数可根据实际的应用场景做灵活的调整,若nginx前面有硬件负载,$binary_remote_addr

打开配置“conf”,将以下配置项配置在需要限制的location中

server {
            listen 80;
            server_name ehall.xxx.edu.cn;

            location /qljfwapp {
                charset utf-8;
                default_type text/plain;
                set $pgt_need 0;
                set $self_logout '1';
                set $cookie_self_domain 1;
                access_by_lua_file /opt/ids_nginx_config/lua/mod_cas.lua;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://qljfw_server;

                limit_req zone=qljfwappLimit  burst=99;
            }
}

zone=qljfwappLimit对应到上面一个参数中所定义的内存区域名称。

burst=99用于指定最大突发请求数,当rate的频次无法满足请求时,超出rate的部分且未超过burst的请求数会放入到请求队列中,将在下一秒中优先出队处理。默认配置为rate-1,例子中就是100-1=99

● nginx.conf主配置文件调优

以下是http节点处全局优化,可根据学校情况自选。

http {
          #http连接超时时间,默认是60s,功能是使客户端到服务器端的连接在设定的时间内持续有效,当出现对服务器的后继请求时,该功能避免了建立或者重新建立连接。
          keepalive_timeout 100;
          lua_code_cache on;

          #启用页面压缩,大大的提升页面的浏览速度
          gzip on;
          gzip_min_length 1k;
          gzip_buffers 4 16k;
          gzip_comp_level 2;
          gzip_types text/html application/json application/javascript text/plain text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
          gzip_vary off;
          gzip_disable "MSIE [1-6]\.";

          #nginx 400 Bad request是request header过大所引起,由于cookie中写入了较大的值
          client_header_buffer_size 128k;
          large_client_header_buffers 4 128k;

          #反向代理缓冲区配置,报proxy_temp Permission denied,避免大文件无法下载
          proxy_buffering on;
          proxy_buffer_size 10m;
          proxy_buffers 4 10m;
          proxy_busy_buffers_size 10m;
          proxy_temp_file_write_size 10m;
          proxy_max_temp_file_size 0;

          #反向代理超时,导入大批量数据超时
          proxy_connect_timeout 300;
          proxy_send_timeout 300;
          proxy_read_timeout 300;
}

3.2 Weblogic调优

JVM调优

支撑高并发场景,需要对JVM进行调优。

-Djava.awt.headless=true -Xms:2048m -Xmx:4096m

-Dweblogic.threadpool.MinPoolSize=50

-Dweblogic.threadpool.MaxPoolSize=100

参考数值

并发请求数

Xms

Xmx

MinPoolSize

MaxPoolSize

200

2048m

4096m

50

100

200-500

4096m

8192m

100

300

500-1000

8192m

16384m

150

500

JDBC连接池

并发请求数

最小连接数

最大连接数

200

50

100

200-500

100

250

500-1000

250

500

3.3 操作系统调优

检查文件打开数,如果显示1024需要优化,否则高并发情况下会报错error:too many open files,无法响应用户请求

ulimit -n

vi  /etc/security/limits.conf  在最下面增加

* soft nproc 65536

* hard nproc 65536

* soft nofile 65536

* hard nofile 65536

vi  /etc/profile,在最后增加

ulimit -n 65535

执行source /etc/profile 使配置立即生效,避免重启操作系统

source /etc/profile

3.4  网络调优

在轻服务的服务器中调整hosts配置,减少服务器之间网络影响。

vim /etc/hosts,IP地址是Nginx的内网IP地址

hosts

10.62.0.102 gateway.wisedu.com

10.62.0.102 auth.wisedu.com

10.62.0.102 ehall.wisedu.com

10.62.0.102 res.wisedu.com

4 历史数据转移

数据分两种类型,流程类项目与非流程类项目。

非流程类业务数据,建议1-2个月或200W+迁移一次。

流程类业务数据,建议2个月或10万条数据迁移一次。

5 常见问题

1、如果报错Closing socket as no data read from it on 121.194.16.77:45,246 during the configured idle timeout of 5 secs时,需要调整登录时长,将5秒改为20秒

这说明线程遭遇的阻塞,请求一直未响应,可能会造成线程池爆掉,可导出线程栈查看因为什么原因而导致的阻塞,可能是程序导致,也可能是数据库查询引起。

最近修改: 2024-03-06Powered by