记一次 Linux 生产环境,高并发处理过程
一、关闭用不到的服务器资源:定时任务,减轻数据库的压力。
二、前端H5调用接口个数减少,减少请求连接次数。缓解服务器及数据库的压力,同时增大客户端与服务器端的连接超时时间,增加用户可以查询到数据的机率。
三、增加第三台tomcat负载,刚启动时有效。过后特别慢。
经过前三步,且加了负载,依然存在访问特别慢。故再次经过如下调整最终稳定快速运行。记录一下。感谢同事们的坚持。
四、解决 oracle 数据库,java jdbc连接异常
oracle 数据库,java jdbc连接异常:Could not get JDBC Connection; nested exception is java.sql.SQLException: Io 异常: Connection reset
解决过程:
Connection reset显然是数据库连接断开,可能的原因:1、网络不稳定,断开时间过长,导致reset 2、数据库连接被其它线程关闭 3、数据库连接池配置的问题,导到程序获取到某个连接进行操作时,而实际上此连接已经失效导致出错。
当数据库连接池中的连接被创建而长时间不使用的情况下,该连接会自动回收并失效,但客户端并不知道,在进行数据库操作时仍然使用的是无效的数据库连接,这样,就导致客户端程序报“ java.sql.SQLException: Io 异常: Connection reset” 或“java.sql.SQLException 关闭的连接”异常。
原因:和Java的安全随机数生成器的实现原理相关。java.security.SecureRandom is a standard API provided by sun. Among various methods offered by this class void nextBytes(byte[]) is one. This method is used for generating random bytes. Oracle 11g JDBC drivers use this API to generate random number during login. Users using Linux have been encountering SQLException(“Io exception: Connection reset”).
1)/dev/random是Linux内核提供的安全随机数生成设备;
2)/dev/random依赖系统中断信息来生成随机数,当设备数目比较少时,产生随机数的速度比较慢,如果应用对随机数的需求比较大时就会供不应求;
3)/dev/random在读取时会阻塞调用线程;
4)/dev/urandom是/dev/random的改良版本,解决了随机数生成慢、阻塞调用的问题,但同时稍微降低了安全性;
5)Linux环境下man random命令可以查阅到/dev/random和/dev/urandom的介绍,比较详尽;
/dev/random 是堵塞的,在读取随机数的时候,当熵池值为空的时候会堵塞影响性能,尤其是系统大并发的生成随机数的时候,如果在随机数要求不高的情况下,可以去读取/dev/urandom
1、启动jvm时,修改应用的JVM参数,方法有三种:
-Djava.security.egd=file:/dev/../dev/urandom
-Djava.security.egd=file:/dev/./urandom
-Djava.security.egd=file:/dev/urandom
2、修改JRE的java.security文件变量securerandom.source
修改配置文件java.security 在$JAVA_HOME/jre/lib/security/java.security
参数 securerandom.source=file:/dev/urandom
五、配置各负载linux服务器 高并发socket最大连接数
Linux操作系统,无论是编写客户端程序还是服务端程序,在高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
1、修改用户进程可打开文件数限制,如图所示:
说明:
ulimit –n :查看当前系统允许当前用户进程打开的文件数限制。
默认为1024:表示当前用户的每个进程最多允许同时打开1024个文件。
这1024个文件中还得去除每个进程打开的标准输入、标准输出、标准错误、服务器监听socket等等,剩下的可用于客户端socket连接的文件数就只有
1024-10=1014个左右,也就是基于Linux的程序最多允许同时1014个TCP并发连接。
(1)修改Linux系统对用户打开软限制和硬限制,如图所示:
vim /etc/security/limits.conf
添加 root soft nofile 65535
root hard nofile 65535
root soft noproc 65535
root hard noproc 65535
说明:root代表修改了root用户打开文件的数的限制,可以用“*”代表所有用户soft和hard指定要修改的软限制还是硬限制。65535 指定修改的新限制值,也就是最大打开的文件数(软限制一定要小于或等于硬限制)
(2) 添加完成后,source /etc/security/limits.conf 使配置生效。
六、Nginx 配置分流机制
(1)已知后台登录与同步新生缴费数据接口只有少部分人进行使用,而大量接口调用来自于H5.
所以 可以按照url路径不同进行分流。
(3)负载服务器按内存及cpu资源使用情况,分配分流压力的比例、失败连接次数、超时时间。