【问题标题】:Is there any cache in jvm or a way how to speed up method which sometimes takes longer?jvm中是否有任何缓存或如何加快有时需要更长时间的方法?
【发布时间】:2011-01-17 07:05:51
【问题描述】:

您好,jvm 是否有任何缓存或设置来加快方法调用?

例如:我确实有一个 Web 服务,当我每 10 分钟左右调用一次时,与每 20 秒调用一次相比,它的处理速度非常慢,大约需要 8-10 秒 - 结果大约是 5 秒。

除此之外没有其他东西在服务器上运行。有没有办法加快速度? (我无法缓存任何对象左右。)

我使用了 JProfiler,我用相同的参数调用它。它正在做同样的事情。区别在于我调用它的时间。服务器空闲多长时间。 1 或 30 分钟是不同的。

谢谢

编辑:平台是:AIX java:IBM J9 VM(构建 2.3,J2RE 1.5.0 IBM J9 2.3 AIX ppc64-64 .. 服务器:tomcat

【问题讨论】:

  • 正如一些人所指出的,分析您的应用程序是一个好的开始。您正在使用基于 SOAP 的 Web 服务吗?与前端 SOAP 处理相比,检查您的端点实现调用是个好主意。以前的经验表明,有时 SOAP 消息处理可能会因所有字符串解析的内存流失而导致性能问题。
  • 是的,它是基于 SOAP 的。轴 1.4

标签: java


【解决方案1】:

可以解释这种行为的因素:

  • 交换 - 处理的低活动操作系统被换出
  • 优先级 - 操作系统进程的优先级有时可能有点神秘,尤其是在进程大部分空闲的情况下。
  • JIT - 调用方法越多,优化得越多
  • GC - 垃圾收集器需要一些时间来稳定,这可能会导致在不同负载下的不同行为。 -server 选项基本上是 JVM 的预设配置。
  • - 线程和其他资源被池化。在低活动量下,池可能会缩小,并且需要重新分配对象

调查此类问题可能很困难。我建议您尝试将操作系统级别的信息与 JVM 级别的信息相关联。分析器可能不是最好的工具,试试JConsolemem 等。

还尝试识别不同典型场景之间的偏差,例如启动后第一次请求,重负载请求,中等负载请求等。尝试识别响应时间何时发生变化。

【讨论】:

    【解决方案2】:

    使用分析器。

    JProfiler 会是一个不错的选择。

    使用分析器,您可以识别代码中的热点。 一旦您确定了这些热点,您就可以考虑在空间和时间方面改善这些热点的各种方法。

    【讨论】:

      【解决方案3】:

      除了改进代码本身,确保运行服务器的 JVM 是服务器 vm 而不是客户端 vm。使用 -server 参数。

      客户端虚拟机

      Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)
      

      服务器虚拟机

      Java HotSpot(TM) Server VM (build 14.0-b16, mixed mode)
      

      要了解您在生产环境中运行的内容,您可以通过编程方式执行以下操作:

      System.getProperty("java.vm.name");
      

      应该会给你类似的东西:Java HotSpot(TM) 64-Bit Server VM

      否则(如果您不想接触代码)您可以执行thread dump 并查看顶部的类似内容:Full thread dump Java HotSpot(TM) Server VM (16.0- b13混合模式)

      【讨论】:

      • 如何知道它当前是否在-server 下运行?谢谢
      • 我在回答中添加了更多信息。
      • 我认为这也可能是问题,但 java.vm.name 是 IBM J9 VM。而且似乎没有我可以传递的服务器客户端参数。
      【解决方案4】:

      空闲期后的缓慢通常是由于进程被换出到磁盘造成的。现代系统永远不会闲置,像 Windows 这样的系统会积极地交换后台进程(足够非焦点操作系统),这经常发生在 Eclipse 用户身上。

      请使用有关您的平台的信息编辑您的问题。

      【讨论】:

        【解决方案5】:

        服务器的负载是多少? 10 分钟后,负载很重的服务器可能已将您的服务交换到磁盘,或者(取决于服务器软件)关闭了为最后一个请求提供服务的服务实例。这意味着为您的新请求准备服务真的很慢。

        有几种方法可以解决这个问题:

        • 将服务移至负载较轻的服务器
        • 调查更好或更合适的软件来运行您的服务 - 您没有提到您正在使用什么(例如 Tomcat?JBoss?)。

        【讨论】:

        【解决方案6】:

        您是否在机器上启用了交换?如果是这样,您是否尝试将其关闭?这似乎是您的内存被换出的明显案例。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-07
          • 1970-01-01
          • 1970-01-01
          • 2022-08-14
          • 2018-10-19
          • 2022-01-08
          相关资源
          最近更新 更多