连接池都一样,实现一样的功能。恐怕不止是连接问题,语言翻译可能照顾不到Java的特点。很有可能资源没有释放 。
解决方案 »
- jsp查询、显示在同一个页面
- webservice linux无法访问
- FOP升级, XSL不支持,请问用什么标签可以代替
- 这种情况下为何出现java.lang.NullPointerException?
- StrutsInAction一书中的UserDirectory类在哪里?
- 帮我看看这tomcat报错日志,经常导致网站进不了!
- 请教一个日志的问题(Logger)
- 在j2ee1.3.1(RI)的环境中运行servlet,使用io读写文件,总提示没有权限,tomcat中可以通过,怎样解决?
- 求解,一个三层菜单查询问题!
- SSH
- 初次用JbulidX写了一个EBJ,都是自动生成的代码,可是运行时报一下错误,那位高手指点一下?
- Struts中关于参数传递的问题~~~
2 检查程序里面的db释放是否做得好,我以前遇到过,就是因为没有close掉,浪费很多资源,甚至于Oracle都报出"open too many cursor"!
3 翻页慢有很多原因,80%是db返回数据太大了。需要优化sql;优化返回结果集的处理。
4 程序架构是否有问题?有些东西是否可以使用缓存?比如一些常用的数据,不用每次到db去找,而应该缓存起来。
用纯JSP实现的话速度肯定受限制,主要JSP在页面上操作结果集速度会打折扣。
我也是做JSP的,模式是JSP+Oracle,使用连接池
遇到的情况也是一样,服务器隔一定时间就是out of memory或IO Exception(连接池不能连数据库),做分页功能时速度很慢,但只要不是分页且数据量不大时,速度还是挺快的后来对数据库作了优化后,查询速度就快多了,IO Exception就很少见了,但Tomcat仍不是很稳定,隔几天就需要重启一次但在我自己机子上用mysql数据库做测试,一天访问上万次都没有问题
1.加大tomcat连接数
2.禁止列目录下的文件
3.加大tomcat可以使用的内存http://www.ee2ee.com/tech_art/1/36.html
现在是在jsp程序中直接连接数据库, 每次连接后只写了rs.close(),stmt.close(), 没有写conn.close(). 是不是一定要写conn.close()?
缓存如何便用?
public void disconnect() {
try {
if(stmt!=null){
stmt.close();
stmt = null;
conn.close();
conn = null;
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
不怪tomcat
1.可能上面说的,程序习惯问题
2.硬翻译后还要优化理顺吧
你的等待是因为第一次引起的。
1:在jsp文件中增加连接池,然后每个文件jsp文件结束后,把连接(conn)关掉。
2: 优化SQL数据库,解决翻页慢。
3:增加缓存,这如何实现??
还有其它办法吗?
我上次已经研究过, 用Apache+Tomcat整合来提高效率。
使用
rs.last();
rs.getrow();
来得到总记录数实在是让人不能忍受的慢
建议使用select count(*) from t where....
来得到总记录数,然后再做一次同样的select来选出记录另外可以插入计时代码看看到底一次查询中最慢的地方是哪一步
rs.getrow();
有的驱动将从头但尾轮循整个结果集,这显然不可取select count(*) from t where....是正确的..
还有如果使用了O/R mapping,则应该使用如hb,jdo等
支持的count(XXX)查询方法,他将调用底层的count函数
而不是把整个记录集取出来在取size
^_^慎用数据库sql语句的分页,大多数都是假分页....
缓存如何便用?
1.设计数据库的时候一定要考虑数据库的效率,尽量避免多表查询,适当的设置索引.数据库没设计好那会很麻烦的,我们公司就一套系统,当数据量很大时,速度就会很慢,就是因为数据库设计得一点都不合理.
2.每次操作完数据库一定要释放相应的资源,当然连接也一定要释放,不然会消耗大量数据库的资源.
3.下面这段代码是有问题的:
public void disconnect() {
try {
if(stmt!=null){
stmt.close();//如果这里产生了异常,那么会造成以后的conn无法释放
stmt = null;
conn.close();
conn = null;
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
代码这样写好些:
try
{
....//操作数据库
stmt.close();
stmt=null;
conn.close();
conn=null;
....
}
catch(Exception e)
{
//
}
finally
{
try
{
if(stmt!=null)
{
stmt.close();
stmt=null;
}
}
catch(Exception e)
{
}
try
{
if(conn!=null)
{
conn.close();
conn=null;
}
}
catch(Exception e)
{
}
}