oracle 和c3p0 数据库的Time_Wait 过多问题的一个解决方案。
项目是B/S模式,放在linux服务器上,tomcat和oracle11g在一台服务器上,tomcat读取数据库采用C3P0连接池,一直比较稳定,所以也没有去管。后来把tomcat放在一台win2008下,数据库放在另外一台win2008下。运行了半月有余,期间经常报数据库连接错误,但刷新下页面也就好了。因为是偶发问题,也没有去关注。终于有一天彻底报错进不了了,报错截图如下:
大意是与数据库连接有问题。这才慌慌的打开数据库服务器查看原因。数据库貌似正常,但用sqlplus连接不上,报超过最大连接数。于是用netstat -ano ,本意是想看看监听端口是否正常监听。未曾想出现了四百多条 1521端口 的time_wait信息:
难怪数据库连不上,于是就暂时先把数据库重启了下。查看了半个小时,数据库连接保持在50左右,以为正常了。到了下午,放心不下,又上服务器查看了一下,乖乖,又有200多条TIME_WAIT。还好发现的早,不然过几天肯定又得出问题。遂谷歌百度搜索一阵,貌似这个问题国内外出现不少,按照一个简单的解决方法:
在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,添加名为TcpTimedWaitDelay的
DWORD键,设置为60,以缩短TIME_WAIT的等待时间 同时添加 MaxUserPort 值为 65534
之后一直就没再出现过这个问题。我就一直纳闷了,配置都差不多,难道是win系统和linux系统性能差别,我想也不可能啊,不能差这么多。这事就一直放在心上,有天突然想起,原来linux下是因为web和数据库放在同一台服务器上,web和数据库是通过本地进程通讯,没涉及到tcp协议。而后来win系统是分开两台,两台低层是通过TCP交流数据。由于win系统的一些默认设置,导致数据库连接池用完后没有及时释放TCP的空闲数据库连接。TCP连接就一直持续增加,慢慢超过了限制。配置了TcpTimedWaitDelay 后,TCP连接在空闲60秒后会自动释放。因此,一般情况下就保持着50个左右的稳定连接。
我想应该是如此,有时候看着数据库池好用,但其实还是对低层做了一个包装。低层的设置还是要配置一下。
-----------------------------------------华丽的分割线,测试一天后补充--------------------------------------------------------------------
第二天,故障依旧,看来不是改改注册表的事情。而且,之后查资料得知主动关闭连接的一方才会进入TIME_WAIT的状态。而数据库一般不会主动关闭连接,只有客户端主动执行了conn.close(),才会关闭数据库连接。那会是什么问题呢,我陷入了深深的思索,无果,继续谷歌百度,看了一些资料。登陆数据库服务器,执行了一下
select count(*) from v$process
查到当前连接数有147
然后执行
show parameter processes
数据库的最大连接数才150
问题在此了,那就好解释,由于后来请求数超过了oracle的最大连接数,所以对于超过数量的连接,oracle就自动断开了,才会有那么多的TIME_WAIT状态。
改大连接
alter system set processes =400 scope = spfile;
session不用改,processes 改了后session自动会根据一个比例增加,改完后我的是624
然后把数据库连接池最大值改成150
测试了一天,再没出现故障,通过netstat -ano| findstr "1521" 查询到的端口状态基本上都是established(已建立连接)和少量的LISTENING
oracle 和c3p0 数据库的Time_Wait 过多问题的一个解决方案。的更多相关文章
- qlserver、Mysql、Oracle三种数据库的优缺点总结
这篇文章主要介绍了sqlserver.Mysql.Oracle三种数据库的优缺点总结,需要的朋友可以参考下 一.sqlserver优点:易用性.适合分布式组织的可伸缩性.用于决策支持的数据仓库功能 ...
- MySQL、SqlServer、Oracle 三种数据库的优缺点
MySQL.SqlServer.Oracle 三种数据库的优缺点 一.MySQL 优点: 缺点: 二.SqlServer 优点: 缺点: 三.Oracle 优点: 缺点: 一.MySQL 优点: 体积 ...
- Nginx做前端Proxy时TIME_WAIT过多的问题
我们的DSP系统目前基本非凌晨时段的QPS都在10W以上,我们使用Golang来处理这些HTTP请求,Web服务器的前端用Nginx来做负载均衡,通过Nginx的proxy_pass来与Golang交 ...
- Nginx下TIME_WAIT过多的调优
查看Nginx并发状态 #netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 1259SYN_ ...
- linux 下Time_wait过多问题解决
linux 下Time_wait过多问题解决 net.ipv4.tcp_syncookies = 1表示开启SYN Cookies.当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SY ...
- 基于Linux的oracle数据库管理 part2( 数据库 准备,安装,创建 )
主要内容 1. 准备 2. 安装 与 删除 软件 3. 创建数据库 4. 配置 SQL*PLUS 环境 准备 1. 软件包, rpm –qa , rpm –ivh *.rpm 2. 检查磁盘空间 3. ...
- Oracle DB 管理数据库的空间
• 描述4 KB 扇区磁盘的概念及使用 • 使用可移动表空间 • 描述可移动表空间的概念 数据库存储 数据库存储 数据库包括物理结构和逻辑结构.由于物理结构和逻辑结构是分开的,因此管理数据的物 理存储 ...
- 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.2 安装数据库软件)
当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 2.2 安装数据库软件 这部分简短讲 ...
- 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.1 安装Oracle数据库软件和创建数据库概览)
当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 2.1 安装Oracle数据库软件和 ...
随机推荐
- vue.js的一些知识点
1. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...
- (转)C#根据当前时间获取周,月,季度,年度等时间段的起止时间
DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays( - Convert.ToInt32(dt.DayOfWeek.T ...
- C 调用redis缓冲
下载 redis 文件, 进行编译 wget https://github.com/redis/hiredis/archive/master.zip 将其解压, 并编译 unzip -x maste ...
- 55. 2种方法求字符串的组合[string combination]
[本文链接] http://www.cnblogs.com/hellogiser/p/string-combination.html [题目] 题目:输入一个字符串,输出该字符串中字符的所有组合.举个 ...
- VMWare虚拟机实例拷贝到另一台服务器后出现Error in the RPC receive loop: RpcIn: Unable to send.错误的解决
把一个VMWare虚拟机实例拷贝到另一台服务器后,在事件查看器中的应用程序日志中不断出现Error in the RPC receive loop: RpcIn: Unable to send.错误, ...
- javascript之循环保存数值
javascript之循环保存数值 语言都是相通的,这句话在我学javascript时有的深刻的意识.js中的for循环与java中的for循环有很大相似之处. 先看下面这段代码 for(var i= ...
- MySql导出数据到csv
通过mysql客户端shell连接到服务器,选择使用的数据库,输入sql代码: select * from test_info into outfile '/tmp/test.csv' fields ...
- Mittag-Leffler定理,Weierstrass因子分解定理和插值定理
Mittag-Leffler定理 设$D\subset\mathbb C$为区域,而$\{a_{n}\}$为$D$中互不相同且无极限点的点列,那么对于任意给定的一列自然数$\{k_{n}\}$, ...
- android UI控件小记
1.关于text和drawableTop之类的间距 android:drawablePadding="10dp" 2.EditText属性 android:phoneNumber= ...
- resharper 改为VS自带的F12功能(转到定义)
1:如何设置vs默认的快捷键方式: 2:重新设置resharper的F12及其其它选项设置: 3.如果还需要使用快捷键 Alt+ENTER 1.帮你实现某个接口或抽象基类的方法 2.提供你处理当 ...