系统正常运行一个月后,上线第一天出现了下列错误,想了很久没有思路。java.sql.sqlexception: io exception: connection refuse
系统正常运行一个月后,上线第一天出现了下列错误,想了很久没有思路。
java.sql.sqlexception: io exception: connection refused(description=(tmp=)(vsnnum=169869568)(err=12519)(error_stack=(error=(code=12519)(emfi=4))))
后来排查出数据库监听异常,发现是ora-12519拒绝错误。后来发现是数据的连接池达到的极致。
具体解决方案如下:
--首先检查process和session的使用情况,在sqlplus里面查看。
sql> show parameter processes
name type value
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 0
db_writer_processes integer 6
gcs_server_processes integer 0
job_queue_processes integer 0
log_archive_max_processes integer 2
processes integer 150
sql> select count(*) from v$process;
count(*)
----------
147
--明显process已经几乎达到了顶峰。
sql> show parameter session
name type value
------------------------------------ ----------- ------------------------------
java_max_sessionspace_size integer 0
java_soft_sessionspace_limit integer 0
license_max_sessions integer 0
license_sessions_warning integer 0
logmnr_max_persistent_sessions integer 1
session_cached_cursors integer 20
session_max_open_files integer 10
sessions integer 160
shared_server_sessions integer
sql>
sql> select count(*) from v$session;
count(*)
----------
153
--同样几乎达到顶峰。
--修改oracle的process和session值,加大他们最大连接数。
--oracle文档要求,sessions和transactions的初始化参数应该源于processes参数,根据默认设置sessions = processes * 1.1 + 5
sql> alter system set processes=300 scope=spfile;
system altered.
sql> alter system set sessions=335 scope=spfile;
system altered.
--重启数据库后参数修改完成
sql> shutdown --如果长时间没反应可能是连接请求没又关闭,也可以使用 abort参数直接关闭
sql> startup --可以用 force参数 关闭当前运行数据库后正常启动。
修改完毕之后,,在进行压力测试的时候,问题解决。