0

我们有一个运行了 2 年的 Web 应用程序,没有任何问题。一周前突然之间,响应时间变得非常糟糕。比正常速度慢大约 10-50 倍。

一次可能有 10-20 个用户使用该系统。90% 的用户请求导致数据库请求。当没有多少用户在线时,系统会在清晨和晚上正常响应。

  1. 我们怎样才能发现问题。解决问题的分步文档?
  2. 是否有专门的公司或专家可以帮助我们解决问题?

环境

Windows Server 2003
Quadcore Intel Xeon X3220, 2.4GHZ, 2 GB Ram
Sybase Anywhere 9 数据库 - 驱动程序:jconn3.jar
Glassfish 2.1
服务器的互联网带宽:100MB/s

应用

外部公司访问的带有 SmartGWT-Frontend (SmartGwt 2.4)
WebService 的 Web 应用程序

没有 EJB,只有 WebContainer

首先,硬件似乎并没有达到极限。
完成繁重的请求时,Java.exe 有时会占用 25% 的 CPU 使用率,使用 374 MB Ram
sybase-db 服务器:220MB ram
可用内存:始终在 1GB 左右

请求快照

我在 8 分钟内对所有请求进行了快照

210 秒客户端请求 (gwtservice) 45%
总共 967 个请求,每个请求 212 毫秒

100 秒网络服务 (BankOrderService) 20%
总共 86 个请求,每个请求 1170 毫秒

160 秒将前端元素加载到浏览器(.js、.png、jpg、.css 等) 35%
总共 623 个请求,每个请求 250 毫秒

最耗时的请求示例(以毫秒为单位):

15427.302 25.07.2012 11:50 Erfolg user1 REMOTE_WEB xx.yy.zz.228 URI:/BankApp/org.Bank.Main/091FF14E7C1D1187C770833D67B13321.cache.html
13558.571 25.07.2012 1 REMOTEWEB 1 REMOTEWEB URI:/BankApp/org.Bank.Main/sc/modules/ISC_Core.js
12631.877 25.07.2012 11:50 Erfolg user1 REMOTE_WEB xx.yy.zz.228 URI:/BankApp/org.Bank.Main/sc/modules/ ISC_Grids.js
11238.439 25.07.2012 11:50 Erfolg user1 REMOTE_WEB xx.yy.zz.228 URI:/BankApp/org.Bank.Main/sc/modules/ISC_Forms.js
10535.141 25.07.2012 11:50 Erfolg user1 REMOTE_WEB xx。 yy.zz.228 URI:/BankApp/org.Bank.Main/sc/modules/ISC_DataBinding.js
10003.115 25.07.2012 11:55 Erfolg 匿名 REMOTE_WEB xx.yy.zz.25 URI:/BankWebService/BankOrderService
9999.412 25.07.2012 11:49 Erfolg 匿名 REMOTE_WEB xx.yy.zz.25 URI:/BankWebService/BankOrderService
9999.229 25.07.2012 11:55 Erfolg 匿名 REMOTE_WEB xx.yy.zz.25 URI:/BankWebService/BankOrderService
9992.415 25. 11:49 Erfolg 匿名 REMOTE_WEB xx.yy.zz.25 URI:/BankWebService/BankOrderService
9990.473 25.07.2012 11:55 Erfolg 匿名 REMOTE_WEB xx.yy.zz.25 URI:/BankWebService/BankOrderService
9132.848 25.07.2012 11:55 Erfolg user1 REMOTE_WEB xx.yy.zz.228 URI:/BankApp/org.Bank.Main/gwtservice
5933.174 25.07.2012 11:50 Erfolg user2 REMOTE_WEB xx.yy.zz.162 URI:/BankApp/org.Bank.Main/sc /modules/ISC_Grids.js
5864.426 25.07.2012 11:50 Erfolg user2 REMOTE_WEB xx.yy.zz.162 URI:/BankApp/org.Bank.Main/sc/modules/ISC_Core.js
5571.739 25.07.2012 11:50 Erfolg user2 REMOTE_WEB xx.yy.zz .162 URI:/BankApp/org.Bank.Main/sc/modules/ISC_DataBinding.js
5473.637 25.07.2012 11:50 Erfolg user2 REMOTE_WEB xx.yy.zz.162 URI:/BankApp/org.Bank.Main/sc/ modules/ISC_Forms.js
5158.104 25.07.2012 11:50 Erfolg user3 REMOTE_WEB xx.yy.zz.237 URI:/BankApp/org.Bank.Main/gwtservice
4488.047 25.07.2012 11:50 Erfolg user2 REMOTE_WEB xx.yy.zz。 162 URI:/BankApp/images/chf.jpg
4442.574 25.07.2012 11:56 Erfolg user2 REMOTE_WEB xx.yy.zz.162 URI:/BankApp/org.Bank.Main/sc/modules/ISC_Core.js
4072.268 25.07.2012 11:54 Erfolg 匿名 REMOTE_WEB xx.yy.zz.25 URI:/BankWebService/BankOrderService
3939.546 25.07.2012 11:56 Erfolg user2 REMOTE_WEB xx.yy.zz.162 URI:/BankApp/org.Bank.Main /sc/modules/ISC_Grids.js
3876.443 25.07.2012 11:50 Erfolg user1 REMOTE_WEB xx.yy.zz.228 URI:/BankApp/org.Bank.Main/sc/modules/ISC_Foundation.js
3727.795 25.07.2012 11:50 Erfolg user4 REMOTE_WEB xx.yy.zz.162 URI:/BankApp/org.Bank.Main/gwtservice
3630.225 25.07.2012 11:48 Erfolg user4 REMOTE_WEB xx.yy.zz.162 URI:/BankApp/org.Bank.Main/ 091FF14E7C1D1187C770833D67B13321.cache.html
3552.007 25.07.2012 11:50 Erfolg user5 REMOTE_WEB xx.yy.zz.228 URI:/BankApp/org.Bank.Main/gwtservice

会话

18 个活动会话
客户端登录后(由 glassfish,https 提供),一旦用户通过 glassfish 身份验证,应用程序本身就会有第二次登录,用户必须定义​​他想要登录的分支。第二次登录后,会话中存储了 3 个属性(用户名、分支、IP 地址)。

总是有大约 40%-50% 的会话没有这 3 个属性,我这样解释,第一次登录成功但第二次没有。

示例:会话 id:e6df980ab67cf0456d78761eefa1
8 个没有 3 个属性的会话

会话 id:d72d16bdabb5500e73f721475440:{username=user1, branch=000x, ipadr=xx.xx.xx.xx}
具有 3 个属性的 10 个会话

我想也许这 8 个会话来自黑客?我跑了wireshark来看看是否有一些可疑的IP地址,但是我没有找到很多。有一天,有一个来自瑞典的 ip,我们在瑞典一无所有。然而,这并没有很多流量,在几秒钟内,wireshark 捕获日志中只有几行。

在 2012 年 7 月 17 日,其中一位用户的 msn 帐户已被黑客入侵。

在那一天左右,问题也开始了。可能会延迟 1-2 天。
巧合?

非常感谢任何帮助。

4

1 回答 1

0

这就是我要按顺序做的事情:

重新启动一切,包括操作系统。几周前出现了闰秒问题。由于 CPU 使用率高,我不得不重新启动我们的 glassfish 服务器。25% 可能是 CPU 内核的最大使用量。我的是基于linux的,我不知道它是否也发生在Windows上。

你能更新你的 glassfish 服务器吗?它已经很老了,并且有许多已知的拒绝服务漏洞。您没有提及您的 Java 版本,但它也可能使用更新。

打开 glassfish 服务器上的访问日志,这样您就可以查看是否收到了一些脚本请求。您可以在管理控制台上执行此操作。

最后看看数据库。有时随着表的变化,查询优化器开始做出糟糕的选择。我不熟悉 sybase 更具体。在 Oracle 中,您需要确保随着表的增长收集优化器统计信息。

于 2012-07-26T00:19:35.880 回答