Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Axis2 Web服务中的延迟原因_Java_Web Services_Axis2 - Fatal编程技术网

Java Axis2 Web服务中的延迟原因

Java Axis2 Web服务中的延迟原因,java,web-services,axis2,Java,Web Services,Axis2,我有一个最初在Axis1中设计的JavaSOAPWeb服务,它不能满足我的性能要求 我最关心的请求是用于向数据库添加大量(数百万行)数据的请求。在客户端,我只是循环浏览文件,将这些数据推送到我的web服务。每行有三个元素,因此请求类似于: <SOAP Envelope/Header/Body> <AddData> <Data> <FirstName>John</FirstName> <LastName>S

我有一个最初在Axis1中设计的JavaSOAPWeb服务,它不能满足我的性能要求

我最关心的请求是用于向数据库添加大量(数百万行)数据的请求。在客户端,我只是循环浏览文件,将这些数据推送到我的web服务。每行有三个元素,因此请求类似于:

<SOAP Envelope/Header/Body>
<AddData>
  <Data>
    <FirstName>John</FirstName>
    <LastName>Smith</LastName>
    <Age>42</Age>
  </Data>
</AddData>
</SOAP Envelope/Body>

约翰
史密斯
42
我发现以下性能趋势:

  • 当我对每个请求执行一行时,我每分钟可以得到大约720行
  • 当我将多行封装到一个请求中时,每分钟最多可以得到2400行(每个请求100行)
不幸的是,这种性能无法满足我们的要求,因为我们要插入数亿行(以每分钟2500行的速度,加载所有数据大约需要2个月)

所以我一直在研究这个应用程序,看看我们的瓶颈在哪里。100行的每个请求大约需要2.5秒(我尝试了几个不同的服务器,得到了类似的结果)。我发现了以下几点:

  • 客户端开销可以忽略不计(从监视我自己的客户端的性能和使用soapui)
  • 数据库活动只占总时间的10%左右(.2秒),因此Hibernate缓存等不会有多大帮助

  • 网络开销可以忽略不计(每发送一个请求的吞吐量为10MB/s大约5年前,我使用Axis2进行类似的工作,但我恐怕无法提供任何真正的“灵丹妙药”来改善它。我记得我们的服务是以每秒数百次而不是每百次几秒的速度运行的

    我建议您分析您的请求处理,或者简单地添加大量日志记录(可能使用许多stopwatch实现中的一种来提供详细的时间安排)看看时间在用什么。一个请求真的需要2秒钟才能通过Axis层到达你的代码,还是只是通过许多小事情累积

    如果单独处理单个请求的速度很快,但一旦开始加载服务,事情就会陷入困境,请调查应用服务器的线程设置。我似乎记得必须将处理分为同步和异步两部分(即,同步部分尽可能少地向客户机提供适当的响应,并在池中的线程中执行重载),但这可能不适合您的情况


    还要确保构建一个新的
    用户
    对象(或其他任何对象)不会花费太多(比如从一个服务中获取一个新ID,它会包装一个DAO,它会撞到一个运行速度慢的数据库服务器,它会运行一个写得不好的存储过程,它会锁定整个表;-))

    大约5年前,我使用Axis2完成了一项类似的工作,但我恐怕无法提供任何真正的“灵丹妙药”让它变得更好。我记得我们的服务以每秒数百次而不是每秒100次的速度运行

    我建议您分析您的请求处理,或者简单地添加大量日志记录(可能使用许多stopwatch实现中的一种来提供详细的时间安排)看看时间在用什么。一个请求真的需要2秒钟才能通过Axis层到达你的代码,还是只是通过许多小事情累积

    如果单独处理单个请求的速度很快,但一旦开始加载服务,事情就会陷入困境,请调查应用服务器的线程设置。我似乎记得必须将处理分为同步和异步两部分(即,同步部分尽可能少地向客户机提供适当的响应,并在池中的线程中执行重载),但这可能不适合您的情况


    还要确保构建一个新的
    用户
    对象(或其他任何对象)不会花费太多(比如从一个服务中获取一个新ID,它会包装一个DAO,它会撞到一个运行速度慢的数据库服务器,它会运行一个写得不好的存储过程,它会锁定整个表;-))

    这是我见过的关于这个问题的最好建议。在单独测试之后,我更困惑了(请参见上面的编辑),但我找到了一个能让我获得可接受性能的组合。我会推迟选择答案一段时间,看看是否有人能提供一些见解,解释为什么每个请求7行与6/req有如此大的不同。但是如果我们不能弄清楚这一点,我想这可能是最好的建议!哇!性能真的下降了它在7排的悬崖下,不是吗?!是时候开始缩小罪魁祸首的范围了。我会尝试用一个“模拟”实现替换数据库连接(或者,如果你喜欢,类似的东西)看看这个奇怪的阈值是否仍然存在。我想说,某个地方正在锁定/等待/和/或超时。我从来没有弄清楚是什么导致了7点的延迟,但我在我们正在开发的另一个类似web服务中也发现了。似乎与数据库无关,所以我认为这是Axis的反序列化。非常奇怪。没有少一点,谢谢你的建议!在我发现错误/配置错误之前,我认为这对面临类似问题的人来说通常是一个很好的建议。这是我见过的关于这个问题的最好的建议。在单独测试之后,我更困惑了(见上面的编辑),但我找到了一个能让我获得可接受性能的组合。我会推迟选择答案一段时间,看看是否有人能提供一些见解,解释为什么每个请求7行与6/req有如此大的不同。但是如果我们不能弄清楚这一点,我想这可能是最好的建议!哇!性能真的下降了它在7排悬崖上,不是吗?!该开始缩小罪犯的范围了。我会尝试更换数据库连接