日期:2014-05-18  浏览次数:20727 次

tomcat运行的程序,数据连接池占的cpu太高了
tomcat运行的程序,数据连接池占的cpu太高了,tomcat本身占的cpu不是很多,但是mssql在资源管理器中占的cpu很高,关闭tomcat,mssql占有的cpu就会降下来,请问这个问题怎么解决阿?

------解决方案--------------------
怀疑你是否真的用了连接池。另外,尽量减少数据库操作,能够在程序中解决的就在程序中解决,能够缓存起来的,就缓存起来。
------解决方案--------------------
连接池的资源用完后,一定要还给连接池,检查一下,资源用完后是否释放
------解决方案--------------------
资源用完后是未释放,你可以去看看mssql的运行状态,是不是一直有很多连接在运行,远远超过你连接池的最大上限
------解决方案--------------------
1 连接池的最小连接数是不是设的很大
2 资源使用后 是否释放连接
------解决方案--------------------
首先,这里的“连接数”是指你的应用服务器和数据库服务器之间的连接,而不是客户端IE和你WEB/应用服务器之间的连接。

数据库连接缓冲池是为了降低每次建立/释放连接时的开销,故而,每次程序端归还回来的连接并不直接关闭,而是留给以后给其他程序再用。归还在池(pool)里,没有被使用的称为空闲(idle),被借出的,使用中的连接称为active。

所以顾名思义,maxIdle者,代表当pool中的空闲连接达到此数值后,以后被归还的连接都回被直接释放,直到池中空闲连接数因为其他程序继续借出而重新低于maxIdle。此外,一般还会对idle的最长时间的设定,比如超过30秒,idle连接留着也浪费,就关掉

而maxActive者,代表你能从这个pool中借出的最大连接的个数。在借出的时候,当池里有idle的,就用idle的,如果一个也没有,且未达到maxActive,就新建一个。假如已经达到maxActive这个数值后,根据不同的池种类和/或不同的设定,一般有以下几种:

1 直接抛错
2 让想要借出连接的线程等待一段时间,如果等不到,再抛错
3 每隔一段检查一次pool,直到有可用连接,否则一直等下去
4 永远可以拿到(视情况需要maxActive不设置或0或负)