起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7017|回复: 14

[处理中3] 紧急求助

[复制链接]

171

主题

481

帖子

2390

积分

金牌会员

Rank: 6Rank: 6

积分
2390
QQ
发表于 2018-6-6 16:08:57 | 显示全部楼层 |阅读模式
我有个客户,使用的是X5.2.7版本的系统。连接到是SQL 2008 R2
但出现过好几次,X5就突然无法登陆的情况。

这几天越来越频繁,只要一出现这种情况,重启X5服务也没有用

只有重启数据库服务器才会编号,但是我有其他的系统连接到数据库都没有问题,只有X5有问题


日志里面也没看出来有什么毛病,能帮忙分析下什么问题吗?着急》。。。

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35910
发表于 2018-6-15 16:02:22 | 显示全部楼层
在线用户超限说明登录的用户超出授权规则中运行的在线用户数,是不能再登录了除非目前已有的在线用户注销或者重启服务,但只这不会导致登录慢
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 1 反对 0

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35910
发表于 2018-6-6 16:59:54 | 显示全部楼层
安装tomcat监测工具看数据库连接池的占用情况
http://bbs.wex5.com/forum.php?mod=viewthread&tid=39228
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

171

主题

481

帖子

2390

积分

金牌会员

Rank: 6Rank: 6

积分
2390
QQ
 楼主| 发表于 2018-6-6 17:56:05 | 显示全部楼层
我要看哪个截图的?怎么分析,有帮助吗?
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35910
发表于 2018-6-7 09:16:24 | 显示全部楼层
运行监测工具后里面的项都可以看了,这个就是标准的tomcat监测工具,可以到网上查找具体的说明
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

171

主题

481

帖子

2390

积分

金牌会员

Rank: 6Rank: 6

积分
2390
QQ
 楼主| 发表于 2018-6-7 21:21:48 | 显示全部楼层
jishuang 发表于 2018-6-7 09:16
运行监测工具后里面的项都可以看了,这个就是标准的tomcat监测工具,可以到网上查找具体的说明 ...

经过监控,发现了进程里面有很多死锁的进程。
捕获.PNG

我们的应用是这样的。我们用X5做了个webservice 服务。代码类似如下:

long startTime = System.currentTimeMillis();
        SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        public String login()
        throws UnknownHostException
        {
                System.out.println("开始时间:"+System.currentTimeMillis());

                String businessServer = "";
                String loginName = "";
                String password = "";
                Properties pro = new Properties();
                try
                {
                        pro.load(getClass().getResourceAsStream("/init.properties"));
                        loginName = pro.getProperty("loginName");
                        password = pro.getProperty("password");
                        businessServer = pro.getProperty("businessServer");
                }
                catch (Exception e)
                {
                        System.out.println("路径不存在");
                }
                String localIP = InetAddress.getLocalHost().getHostAddress();

                ActionEngine.init(businessServer);
               

                String  bSessionID = ActionEngine.login(loginName, ActionUtils.md5(password), localIP, null);
               
               
                return bSessionID;
        }

执行完X5的action之后,自动Logout。

然后,最近白天调用接口的操作一多,系统就卡死不动了。

为了模拟问题,我们做了个测试程序。用程序每次调用1000次执行webservice的动作,问题就再现了。
发现进程里面就存在blocked的情况了。

只有中断了调用webservice的操作,系统才能恢复正常,请问这个有解吗?


回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35910
发表于 2018-6-8 08:58:07 | 显示全部楼层
死锁的进程要跟踪具体执行到什么地方导致死锁了
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

171

主题

481

帖子

2390

积分

金牌会员

Rank: 6Rank: 6

积分
2390
QQ
 楼主| 发表于 2018-6-15 15:08:26 | 显示全部楼层
jishuang 发表于 2018-6-8 08:58
死锁的进程要跟踪具体执行到什么地方导致死锁了

我们加了个日志监控。发现是登录时占用的时间过长。
a2018-06-15 14:51:18 [http-9081-26] [com.justep.business.server.BusinessServer] ERROR: action:<?xml version="1.0" encoding="UTF-8"?>
<action process="/FTERP/webServiceMgt/process/webService/webServiceProcess" activity="WebService" name="transferConsumption" executeContext="" content-type="application/xml"><parameters><parameter name="DocumentText"><xbiz:simple xmlns:xbiz="http://www.justep.com/xbiz#" type="http://www.w3.org/2001/XMLSchema#String">&lt;root&gt;&lt;DocumentText&gt;
                &lt;NewDocumentNo&gt;LLD18060586&lt;/NewDocumentNo&gt;
          &lt;NewLineNo&gt;20000&lt;/NewLineNo&gt;
                &lt;NewID&gt;8D223595C98F4733B76443DBE926985A&lt;/NewID&gt;
          &lt;DocumentNo&gt;LLD18060457&lt;/DocumentNo&gt;
                &lt;LineNo&gt;40000&lt;/LineNo&gt;
                &lt;ID&gt;F0AA4EF3D6EE467DA8FA853D2BFC7508&lt;/ID&gt;
                &lt;ItemNo&gt;90976549&lt;/ItemNo&gt;
                &lt;Quantity&gt;200.0000&lt;/Quantity&gt;
                &lt;NotGoodQuantity&gt;0.0000&lt;/NotGoodQuantity&gt;
                &lt;LotNo&gt;180523080&lt;/LotNo&gt;
                &lt;ExpirationDate&gt;&lt;/ExpirationDate&gt;
                &lt;MesUser&gt;12333&lt;/MesUser&gt;
                &lt;/DocumentText&gt;&lt;/root&gt;</xbiz:simple></parameter><parameter name="startTime1"><xbiz:simple xmlns:xbiz="http://www.justep.com/xbiz#" type="http://www.w3.org/2001/XMLSchema#String">1529045472294</xbiz:simple></parameter><parameter name="startTime"><xbiz:simple xmlns:xbiz="http://www.justep.com/xbiz#" type="http://www.w3.org/2001/XMLSchema#String">1529045430060</xbiz:simple></parameter></parameters></action>
java.lang.reflect.InvocationTargetException
        at sun.reflect.GeneratedMethodAccessor156.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at com.justep.system.action.Engine.invokeActions(Native Method)
        at com.justep.system.action.Engine.invokeActions(Unknown Source)
        at com.justep.business.server.BusinessServer.doAction(Unknown Source)
        at com.justep.business.server.BusinessServer.doExcute(Unknown Source)
        at com.justep.business.server.BusinessServer.excute(Unknown Source)
        at com.justep.business.server.BusinessServerServlet.execService(Unknown Source)
        at com.justep.business.server.BusinessServerServlet.service(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
        at com.justep.x.bs.BusinessServerServlet.service(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
        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.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.Exception: 接口操作超时,请重试,
调用时间2018/06/15 14:50:30:060,(这个是别人调用axis2来时间也就是登录开始的时间)
登录时间2018/06/15 14:51:12:294,(这个是后台自动登录完成的时间,开始调用内部的action)
开始时间为2018/06/15 14:51:17:483,(这个是进入内部action的时间)
完成时间为2018/06/15 14:51:18:109(这个是action执行完成的时间)



现在的原因应该就是登录的时候,有时候时间过长。每天会发出2000-3000笔交易,可能有20几笔会有这种情况。其他时候都比较正常。


请问这个应该怎么办,能否加快登陆的时间


这是登录的代码
long startTime = System.currentTimeMillis();
       
        SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");


        public String login()
        throws UnknownHostException
        {
               


                String businessServer = "";
                String loginName = "";
                String password = "";
                Properties pro = new Properties();
                try
                {
                        pro.load(getClass().getResourceAsStream("/init.properties"));
                        loginName = pro.getProperty("loginName");
                        password = pro.getProperty("password");
                        businessServer = pro.getProperty("businessServer");
                }
                catch (Exception e)
                {
                        System.out.println("路径不存在");
                }
                String localIP = InetAddress.getLocalHost().getHostAddress();


                ActionEngine.init(businessServer);


           String bSessionID = ActionEngine.login(loginName, ActionUtils.md5(password), localIP, null);
               
               
                return bSessionID;


这个是调用代码。 MESActions.rar (1.38 KB, 下载次数: 40)
回复 支持 反对

使用道具 举报

171

主题

481

帖子

2390

积分

金牌会员

Rank: 6Rank: 6

积分
2390
QQ
 楼主| 发表于 2018-6-15 15:13:35 | 显示全部楼层
还有的登录时间长,到了两分钟。然后日志里就有用户数超限的错误。
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35910
发表于 2018-6-15 15:32:20 | 显示全部楼层
你上方法的整个操作也就不到1分钟啊,如果是登录卡确认system数据库连接池是否够用

long cur = System.currentTimeMillis();
String bSessionID = ActionEngine.login(loginName, ActionUtils.md5(password), localIP, null);
System.out.println("耗时为:"+ Long.toString(System.currentTimeMillis()-cur));
可以这样输出一下看看执行时间,是以毫米为单位的


远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

171

主题

481

帖子

2390

积分

金牌会员

Rank: 6Rank: 6

积分
2390
QQ
 楼主| 发表于 2018-6-15 15:36:40 | 显示全部楼层
jishuang 发表于 2018-6-15 15:32
你上方法的整个操作也就不到1分钟啊,如果是登录卡确认system数据库连接池是否够用

long cur = System.cur ...

我们是和生产执行系统连接的,一般都是不到一秒的。所以我们设置的是30秒就中断。这个1分钟就太长时间了。我刚加上了。再监控看看,数据库连接池应该是够用的,每次看到这个都是1的。
捕获.PNG

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-19 05:36 , Processed in 0.078718 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表