项目

一般

简介

V10敏捷 应用登陆卡顿问题

由 huang junrui 在 超过 3 年 之前添加

问题类型:数据连接池配置问题

造成原因:

应用一直处于语句执行的状态(完整堆栈日志在附件中):

 java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:171)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at com.kingbase8.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:140)
    at com.kingbase8.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:109)
    at com.kingbase8.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:67)
    at com.kingbase8.core.KBStream.receiveChar(KBStream.java:291)
    at com.kingbase8.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2049)
    at com.kingbase8.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:440)
    - locked <0x00000007769039e0> (a com.kingbase8.core.v3.QueryExecutorImpl)
    at com.kingbase8.jdbc.KbStatement.executeInternal(KbStatement.java:467)
    at com.kingbase8.jdbc.KbStatement.execute(KbStatement.java:389)
    at com.kingbase8.jdbc.KbPreparedStatement.executeWithFlags(KbPreparedStatement.java:198)
    at com.kingbase8.jdbc.KbPreparedStatement.executeQuery(KbPreparedStatement.java:146)
    at com.apusic.aas.dbcp.dbcp2.PoolableConnection.validate(PoolableConnection.java:287)
    at com.apusic.aas.dbcp.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:630)
    at com.apusic.aas.dbcp.dbcp2.PoolableConnectionFactory.validateObject(PoolableConnectionFactory.java:648)
    at com.apusic.aas.dbcp.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:476)
    at com.apusic.aas.dbcp.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:353)
    at com.apusic.aas.dbcp.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:134)
    at com.apusic.aas.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:753)
    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
    at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
    at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119)
    at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
    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 com.ucap.pub.authorization.service.PubLogService$$EnhancerByCGLIB$$7c56476c.updateLogin(<generated>)
    at com.ucap.pub.authorization.util.SessionListen.sessionDestroyed(SessionListen.java:61)
    at com.apusic.ams.session.StandardSession.expire(StandardSession.java:801)
    - locked <0x00000007753ae770> (a com.apusic.ams.session.StandardSession)
    at com.apusic.ams.session.StandardSession.expire(StandardSession.java:743)
    at com.apusic.ams.session.StandardSession.invalidate(StandardSession.java:1229)
    at com.apusic.ams.session.StandardSessionFacade.invalidate(StandardSessionFacade.java:171)
    at com.ucap.pub.authorization.action.PubUserAction.login(PubUserAction.java:126)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
    at com.ucap.pub.authorization.UcapFilterDispacher.doFilter(UcapFilterDispacher.java:116)
    at com.apusic.ams.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at com.apusic.ams.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at com.ucap.pub.util.log.SetLogUserInfoFilter.doFilter(SetLogUserInfoFilter.java:35)
    at com.apusic.ams.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at com.apusic.ams.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at util.SQLTraceFilter.doFilter(SQLTraceFilter.java:34)
    at com.apusic.ams.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at com.apusic.ams.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at com.apusic.ams.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at com.apusic.ams.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at com.apusic.ams.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    at com.apusic.ams.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at com.apusic.ams.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at com.apusic.ams.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at com.apusic.ams.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at com.apusic.connector.http11.Http11Processor.service(Http11Processor.java:367)
    at com.apusic.connector.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at com.apusic.connector.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at com.apusic.aas.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1678)
    at com.apusic.aas.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    - locked <0x000000076fe86548> (a com.apusic.aas.util.net.NioEndpoint$NioSocketWrapper)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at com.apusic.aas.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

   Locked ownable synchronizers:
    - <0x00000006cee99590> (a java.util.concurrent.ThreadPoolExecutor$Worker)

版本号:V10敏捷版 2020版本

分析过程:应用在content.xml配置了jndi数据源,但是过了一段时间,连接就全部断开了,但通过jdbc直接连数据库并没有改问题,堆栈日志也显示只有数据库的连接有锁住情况,可能是数据连接池未释放导致

 

解决方案:对jndi的数据连接不作限制,即图中的maxIdle和maxTotal都设为0(0为不设限制)

界面截图:

日志截图:

解决操作: