项目是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 过多问题的一个解决方案。的更多相关文章

  1. qlserver、Mysql、Oracle三种数据库的优缺点总结

    这篇文章主要介绍了sqlserver.Mysql.Oracle三种数据库的优缺点总结,需要的朋友可以参考下   一.sqlserver优点:易用性.适合分布式组织的可伸缩性.用于决策支持的数据仓库功能 ...

  2. MySQL、SqlServer、Oracle 三种数据库的优缺点

    MySQL.SqlServer.Oracle 三种数据库的优缺点 一.MySQL 优点: 缺点: 二.SqlServer 优点: 缺点: 三.Oracle 优点: 缺点: 一.MySQL 优点: 体积 ...

  3. Nginx做前端Proxy时TIME_WAIT过多的问题

    我们的DSP系统目前基本非凌晨时段的QPS都在10W以上,我们使用Golang来处理这些HTTP请求,Web服务器的前端用Nginx来做负载均衡,通过Nginx的proxy_pass来与Golang交 ...

  4. Nginx下TIME_WAIT过多的调优

    查看Nginx并发状态 #netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 1259SYN_ ...

  5. linux 下Time_wait过多问题解决

    linux 下Time_wait过多问题解决 net.ipv4.tcp_syncookies = 1表示开启SYN Cookies.当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SY ...

  6. 基于Linux的oracle数据库管理 part2( 数据库 准备,安装,创建 )

    主要内容 1. 准备 2. 安装 与 删除 软件 3. 创建数据库 4. 配置 SQL*PLUS 环境 准备 1. 软件包, rpm –qa , rpm –ivh *.rpm 2. 检查磁盘空间 3. ...

  7. Oracle DB 管理数据库的空间

    • 描述4 KB 扇区磁盘的概念及使用 • 使用可移动表空间 • 描述可移动表空间的概念 数据库存储 数据库存储 数据库包括物理结构和逻辑结构.由于物理结构和逻辑结构是分开的,因此管理数据的物 理存储 ...

  8. 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.2 安装数据库软件)

    当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 2.2 安装数据库软件 这部分简短讲 ...

  9. 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.1 安装Oracle数据库软件和创建数据库概览)

    当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 2.1 安装Oracle数据库软件和 ...

随机推荐

  1. WebForm控件--2016年12月29日

    简单控件 1.Label  =>   <span id="Label1">Label1</span> 2.Literal  =>  Text 填 ...

  2. Activity系列讲解---返回结果的处理

    设想一下:由当前Activity跳转到其它Activity,从其它Activity再返回到当前Activity时,如何获取其它Activity存放的数据?下面用一个例子讲解, 点击selsect按钮跳 ...

  3. MVC中使用Entity Framework 基于方法的查询学习笔记 (一)

    EF中基于方法的查询方式不同于LINQ和以往的ADO.NET,正因为如此,有必要深入学习一下啦.闲话不多说,现在开始一个MVC项目,在项目中临床学习. 创建MVC项目 1.“文件”--“新建项目”-- ...

  4. erlang 在线生成crashdump

    一般说来抓dump 4种 方式:      1. erlang:halt(“abort”).      2. 在erlang shell下输入CTRL C + “大写的A”      3.等着进程崩溃 ...

  5. Redis持久化

    Redis持久化 快照(默认) 将内存中的数据以快照的方式写入到二进制文件中,默认文件名是dump.rdb. 配置自动化做快照持久化(如redis在n秒内如果超过m个key被修改就自动做快照) sav ...

  6. Node.js配合node-http-proxy解决本地开发ajax跨域问题

    情景: 前后端分离,本地前端开发调用接口会有跨域问题,一般有以下3种解决方法: 1. 后端接口打包到本地运行(缺点:每次后端更新都要去测试服下一个更新包,还要在本地搭建java运行环境,麻烦) 2. ...

  7. Selenium Xpath Tutorials - Identifying xpath for element with examples to use in selenium

    Xpath in selenium is close to must required. XPath is element locator and you need to provide xpath ...

  8. sublime一些快捷键

    语法: 后代:> 缩写:nav>ul>li <nav> <ul> <li></li> </ul> </nav> ...

  9. acm 1002 算法设计

    最近突然想往算法方向走走,做了做航电acm的几道题 二话不说,开始 航电acm 1002 题主要是处理长数据的问题,算法原理比较简单,就是用字符数组代替int,因为int太短需要处理的数据较长 下面是 ...

  10. js数组的sort排序详解

    <body> <div> sort()对数组排序,不开辟新的内存,对原有数组元素进行调换 </div> <div id="showBox" ...