星期四, 10 九月 2009
转 Tomcat有关内存的常见问题
Posted by at 8:05 下午 in 未分类
Posted by at 7:57 下午 in 未分类
META-INF\context.xml 内容
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
auth="Container"
description="DB Connection"
driverClass="com.mysql.jdbc.Driver"
maxPoolSize="4"
minPoolSize="2"
acquireIncrement="1"
name="jdbc/TestDB"
user="test"
password="ready2go"
factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
jdbcUrl="jdbc:mysql://localhost:3306/test?autoReconnect=true"
/>
</Context>
JSP样例代码:
InitialContext ic = new InitialContext();
DataSource ds = ( DataSource ) ic.lookup( "java:comp/env/jdbc/pooledDS" );
Posted by at 7:43 下午 in 未分类
MySQL的8小时问题的原因是,MySQL的参数interactive_timeout,也就是交互超时时间默认为8小时。说白了,也就是如果一个链接在8小时后,还没有和服务器交互,这个连接就会被MySQL服务器断开。因为MySQL能够承受的并发连接有限,所以这个参数有助于清除那些长时间不活动的链接。如果你web程序访问量很小,8小时都没有和MySQL服务器交互数据,就会产生socket之类的错误。类似错误信息如下:
2009-09-09 08:56:11,408 ERROR JDBC begin failed com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.SocketException MESSAGE: Software caused connection abort: socket write error STACKTRACE: java.net.SocketException: Software caused connection abort: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) at java.net.SocketOutputStream.write(SocketOutputStream.java:136) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123) at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2744) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) at com.mysql.jdbc.Connection.execSQL(Connection.java:3277) at com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5442) at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:881) at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:63) at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326) at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:510) at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:350) at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:262) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:631) at cn.cddouble.app.manager.ProductManager$$EnhancerByCGLIB$$db00f5f9.findForNewProduct() at cn.cddouble.app.web.front.ProductController.onIndex(ProductController.java:39) at com.baseframework.core.web.BaseManageController.index(BaseManageController.java:77) at sun.reflect.GeneratedMethodAccessor59.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:445) at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:382) at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:859) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:793) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) at org.tuckey.web.filters.urlrewrite.RewrittenUrl.doRewrite(RewrittenUrl.java:176) at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.baseframework.core.web.support.MessageFilter.doFilter(MessageFilter.java:46) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283) at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767) at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697) at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) at java.lang.Thread.run(Thread.java:595) ** END NESTED EXCEPTION ** Last packet sent to the server was 0 ms ago. at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2759) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) at com.mysql.jdbc.Connection.execSQL(Connection.java:3277) at com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5442) at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:881) at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:63) at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326) at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:510) at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:350) at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:262) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:631) at cn.cddouble.app.manager.ProductManager$$EnhancerByCGLIB$$db00f5f9.findForNewProduct( ) at cn.cddouble.app.web.front.ProductController.onIndex(ProductController.java:39) at com.baseframework.core.web.BaseManageController.index(BaseManageController.java:77) at sun.reflect.GeneratedMethodAccessor59.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:445) at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:382) at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:859) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:793) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) at org.tuckey.web.filters.urlrewrite.RewrittenUrl.doRewrite(RewrittenUrl.java:176) at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.baseframework.core.web.support.MessageFilter.doFilter(MessageFilter.java:46) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283) at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767) at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697) at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) at java.lang.Thread.run(Thread.java:595)
如何解决MySQL数据库8小时的问题,以下方式查自网上,仅供参考。
DBCP增加以下配置信息:
1. //set to 'SELECT 1'
2. validationQuery = "SELECT 1"
3. //set to 'true'
4. testWhileIdle = "true"
5. //some positive integer
6. timeBetweenEvictionRunsMillis = 3600000
7. //set to something smaller than 'wait_timeout'
8. minEvictableIdleTimeMillis = 18000000
9. //if you don't mind a hit for every getConnection(), set to "true"
10. testOnBorrow = "true"
DBCP相关参数说明参照 《JSP空间链接池DBCP配置参考》。
C3P0增加以下配置信息:
1. //获取connnection时测试是否有效
2. testConnectionOnCheckin = true
3. //自动测试的table名称
4. automaticTestTable=C3P0TestTable
5. //set to something much less than wait_timeout, prevents connections from going stale
6. idleConnectionTestPeriod = 18000
7. //set to something slightly less than wait_timeout, preventing 'stale' connections from being handed out
8. maxIdleTime = 25000
9. //if you can take the performance 'hit', set to "true"
10. testConnectionOnCheckout = true
C3P0参数请参看其本身携带的帮助文档。
Posted by at 7:18 下午 in 未分类
Posted by at 6:15 下午 in 未分类
NetJSP 服务器位于电信机房,采用UNIX系统和MySQL数据库,建议电信宽带用户选用,能获得更加的访问速度。
Posted by at 11:53 下午 in 未分类
Processing of multipart/form-data request failed. \tmp\upload_e03acaa_123937a7d7e__7fff_00000008.tmp (系统找不到指定的路径。)
这个需要配置上传部件的路径才行.
打开blojsom-plugins.xml文件,找到如下片段:
<bean id="fileUploadProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties">
<props>
<prop key="temporary-directory">/tmp</prop>
<prop key="maximum-upload-size">25000000</prop>
<prop key="maximum-memory-size">50000</prop>
<prop key="accepted-file-types">image/jpeg, image/gif, image/png, video/x-msvideo, video/x-ms-asf,
audio/x-mpegurl, audio/x-midi, video/quicktime, audio/mpeg, audio/x-mpeg, audio/wav, video/mpeg,
application/vnd.rn-realmedia</prop>
<prop key="invalid-file-extensions">.jsp, .jspf, .jspi, .jspx, .php, .cgi</prop>
<prop key="resources-directory">/resources/</prop>
</props>
</property>
</bean>
将temporary-directory属性设置为Tomcat可读写的一个目录就可以了!
Posted by at 11:48 下午 in 未分类
Posted by at 11:22 下午 in 未分类
从Tomcat5.5开始,定义数据源变的简单了。Tomcat允许你在自己的WEB工程的META-INF/context.xml文件中来定义数据源,而不像原来在server.xml中定义而后在web.xml引用它。下面简单地描述这个过程。
1.安装JDBC驱动
拷贝JDBC驱动的jar文件到Tomcat的公共库目录下,Tomcat5.5为$TOMCAT$\common\lib目录,Tomcat6为$TOMCAT$\lib下,注意而不是自己WEB程序的WEB-INF\lib下。
2.创建 META-INF/context.xml
在web程序根目录创建META-INF目录,在其下再创建context.xml文件,大致内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/WallyDB" auth="Container"
type="javax.sql.DataSource" username="wally" password="wally"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost;DatabaseName=mytest;SelectMethod=cursor;"
maxActive="8"
/>
</Context>
这个例子使用的是SQL Server数据库,您修改相应属性例如资源名称、驱动类名、数据库帐号、数据库密码、数据库名称和驱动的URL来适合你的需要。
3.访问数据源,下面是一个servlet片段:
InitialContext ic = new InitialContext();
DataSource ds = ( DataSource ) ic.lookup( "java:comp/env/jdbc/WallyDB" ) ;
Connection c = ds.getConnection();
...
c.close();
注意当使用DataSource的lookup方法时,必须在资源名称前加前缀java:comp/env/ 。
相关文章,参看 《Tomcat5.5私有JNDI、数据源(链接池)的配置》 。
Posted by at 8:57 下午 in 未分类
如果您已经有了一个JSP空间,那么一般对应这个JSP空间,会有FTP和数据库的帐号和密码等信息。
首先, 使用FTP把程序传到服务器上,这个要咨询一下JSP空间商的技术人员,看其目录结构有没有特别的说明。
其次,把本地数据库的数据导入到JSP空间对应的数据库中。
再次,配置程序的相关信息,例如程序中使用的数据库帐号和密码等信息。
如果没什么错误,就可以运行了。有错误也不要着急,慢慢调试。
Posted by at 2:37 下午 in 未分类
Posted by at 11:37 下午 in 未分类
1.文件路径格式的问题。
Windows文件路径的格式类似 C:\AA\bb\c.txt 的形式,Windows有C、D、E等盘符的概念,而且不区分大小写。文件分割符是 \ 。
UNIX文件的格式类似 /a/b/c.txt 的形式,"/"就是unix文件系统的根,无盘符概念,而且区分大小写。文件分割符是 / 。
编写程序时应该使用 java.io.File.separator 来获取文件分割符,来获得系统无关性。
2.MySQL数据库的问题。
由于UNIX下文件名称区分大小写,因此MySQL数据库的库、表名称在UNIX系统下是区分大小写的,这个和Windows系统下的MySQL是不同的。
Posted by at 10:53 下午 in 未分类
sqljdbc.jar 类库提供对 JDBC 3.0 的支持。需要JRE5.0(JDK1.5)。
sqljdbc4.jar 类库提供对 JDBC 4.0 的支持。需要JRE6.0(JDK1.6)。
用错版本,不保证能稳定运行,可能产生异常。
Posted by at 9:16 下午 in 未分类
SQL Server 2000的企业管理器无法连接SQL Server 2005和2008。
SQL Server 2005的SQL Server Management Studio也无法连接SQL Server 2008。
一句话就是,这个管理工具向下兼容,不向上兼容。
Posted by at 9:11 下午 in 未分类
JSP程序做好之后,我们很想把其放在外网(Internet)服务器上看看效果,哪里可以提供测试呢?给大家介绍两个网站,供大家测试。使用一个有效邮件注册一个帐号,然后接收带有初始密码的邮件。登录,进入后台,就可以创建试用的JSP空间了。试用的JSP空间每天会被系统停机四次,时间为3、9、15、21点,停了之后自己可以随时再启动。除了这个限制之外,和正式JSP空间的功能上没任何区别,也没有框架的限制。开通之前,最好估算一下程序可能占用的内存,每种型号JSP空间的可用内存是不一样的,如果可用内存小于自己程序需要的内存会影响运行的速度。不多说了,这两个网站是:
163JSP Windows系统 支持SQL Server 2008、ACCESS、MySQL数据库。
ChinaJVM UNIX系统 支持MySQL数据库。
以上两个网站,JSP空间管理系统很方便,JDK、Tomcat、数据库的版本都可以随时随意切换。
Posted by at 4:09 下午 in 未分类