当前位置: 首页 > 知识库问答 >
问题:

我怎样才能知道我的战争花了这么长时间才在Tomcat上部署?

慕迪
2023-03-14

我有一个web应用程序,在Tomcat上部署该应用程序通常需要大量的时间。我怀疑某个地方的数据库连接正在等待超时,但这只是一种猜测,我想确定是什么导致了中断,这样我就可以解决这个问题。谁能给我提个建议吗?我是不是应该在Tomcat加载战争时对它进行侧写并在那里寻找线索呢?如果是的话,有没有适合初学者的教程?

如果这很重要,我的web应用程序使用spring和Hibernate。我的一个同事告诉我,可能是这些导致了速度的减慢,因为它们太大了,以至于在某个地方,类加载器会因为它需要加载的类数量而窒息。

当我停止Tomcat或将WAR热部署到一个已经运行的Tomcat时,我也会看到这一点:

Jun 1, 2012 6:03:33 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [/nacem-rest] registered the JDBC driver [oracle.jdbc.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Jun 1, 2012 6:03:34 PM org.apache.catalina.startup.HostConfig deployWAR

也许这就是问题的一部分?重新部署我的web应用程序几乎总是需要重新启动Tomcat,我一直认为这是上面提到的JDBC驱动程序的问题造成的,但也可能与启动时间太慢有关?

共有1个答案

范翰池
2023-03-14

您可以使用探查器,但它有点矫枉过正。相反,只需在应用程序加载时进行少量线程转储。您可以使用jstackjvisualvm,网络上有大量的资源描述了如何这样做。基本上,您需要一个Tomcat的PID(请参见:jps)。

如果您发现很难分析线程转储-将它添加到您的问题中。通常很容易找到瓶颈。典型问题:

  • 应用程序尝试从Internet获取一些资源,如XML Schema
  • 要在类路径上扫描大量类
  • 过多的GC(启用详细的GC日志记录以防万一)
  • 内存不足(交换,请参阅iostat/iotop)
 类似资料:
  • 有什么方法可以简化这段代码吗?我正好有一个白色的一块,想要得到它的位置 代码: 瓦片类: 件类:

  • 发生在我身上的是MDB接收消息并尝试处理它们,甚至我的服务器也没有完全启动 知道怎么解决这个问题吗?

  • 我正在尝试获取角色id,但我不知道如何操作,因为它不起作用: 身份验证::用户- 对象(照亮\数据库\雄辩\收集)#843(1) {["项目":受保护]=

  • 我有这段代码,但我不明白为什么会出现以下错误:

  • 问题内容: 我有一些输入数据,输入文件中的时间戳以从文件名中指定的日期时间开始的小时数形式出现。 这有点没用,所以我需要将其转换为python datetime.datetime对象,然后将其放入numpy数组中。我可以编写一个for循环,但是我想做些类似的事情: 引发TypeError。 能做到吗?我被python 2.6和numpy 1.6.1困住了。 问题答案: 请参见NumPy Datet

  • 非法尝试将非集合映射为@onetomany、@manytomany或@collectionofelements:cloudcodes.schema.generator.model.useroudata.orgunitpathid 有人能帮我提前谢谢你吗。