- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
启动 Jetty 在我的 Web 应用程序开始加载之前有很长的延迟(8 秒)
13:50:10 [INFO] jetty-9.4.5.v20170502
13:50:18 [INFO] Scanning elapsed time=146ms
启用调试日志记录后,有两个有趣的步骤
提取依赖的war-application,毕竟需要时间(3s)
10:03:13 [DEBUG] Extracting entry = null from jar file:[..]/application-1.0.war
10:03:16 [DEBUG] Unpacked overlay: jar:file:[..]/application-1.0.war!/ to file:[..]
以及以下 4 秒的延迟:
10:03:16 [DEBUG] Service loaders found in 0ms
10:03:20 [DEBUG] loaded interface javax.servlet.ServletContainerInitializer
我如何调试或影响导致超过 4 秒延迟的原因?
pom.xml
<dependency>
<groupId>com.company</groupId>
<artifactId>application</artifactId>
<version>1.0</version>
<type>war</type>
</dependency>
[...]
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.5.v20170502</version>
<configuration>
<webApp>
<webInfIncludeJarPattern>empty</webInfIncludeJarPattern>
<containerIncludeJarPattern>empty</containerIncludeJarPattern>
</webApp>
</configuration>
</plugin>
web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true">
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.app.AnnotationConfig</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
[...]
</web-app>
最佳答案
你有一个比平均水平更大的 webapp(70MB 的 WEB-INF/lib jar),但没有什么特别大的(我见过 800MB 的 war 文件)
发生的一些事情可能会导致速度变慢。
WEB-INF/lib/*.jar!/META-INF/resources/
) 解压到 WebApp 临时目录@HandlesType
类上的 javax.servlet.ServletContainerInitializer
注释中声明的注释和类型)如果您的文件系统很慢,那么以上任何一项都会减慢您的速度。
Note: the DEBUG logging of Jetty will tell you the timing of each of those (even breaking down the timing of bytecode scanning timing to the individual jar)
字节码扫描步骤是最常影响启动时间的地方。
配置<containerIncludeJarPattern>
不推荐使用“empty”,这是 Servlet、JSP、Taglib 运行所必需的。
The containerIncludeJarPattern
default无论如何只是 servlet/jsp/taglib jar 。 (扫描需要几微秒)
<webInfIncludeJarPattern>
也不应该只是“空”,它至少应该包括你的 WEB-INF/classes
内容(又名 .*/classes/.*
)。考虑将其设置为仅扫描那些 WEB-INF/lib
你需要的 jar 。 (类似 .*/lib/spring-.*\.jar$|.*/classes/.*
)
WEB-INF/lib/*.jar
中类的大小(以字节为单位)和 WEB-INF/classes
实际上是无关紧要的。与时间更相关的是找到的文件数量(甚至是非类文件)。
如果您使用资源 jar (WEB-INF/lib/*.jar!/META-INF/resources/
),那么这是一个严重的惩罚/缓慢启动的根源。
您可以做什么:
首先查看您的 DEBUG 日志,它会告诉您哪里有问题。
接下来,使用 quickstart
进行调查如果启动时间很重要,Jetty 的功能(它有 2 个部分,一个构建时组件,用于扫描和构建包含在您的 war 中的 jetty-quickstart.xml
,以及一个运行时模块,用于查找并使用 jetty-quickstart.xml
(如果找到)
最后,如果您使用的是资源 jar (WEB-INF/lib/*.jar!/META-INF/resources/
),请考虑将这些内容移出 WEB-INF/lib
。并在构建过程中进入 war 中的正常位置(maven 中的 package
阶段)。这些很方便,但有许多您似乎不喜欢的副作用。 (还要考虑运行时资源解析冲突的问题)。
关于java - Jetty 启动需要多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45590429/
我有一个独立的 Thread 应用程序。这是一个等待消息的监听器,当消息到达时执行一些操作,其中我必须将消息保存在数据库中。但我遇到了问题,因为如果我运行应用程序并“手动发送消息”,一切都会正常工作,
我有以下php代码: sleep(65); $query = "UPDATE database.table SET XXXXXXX = XXXXXXX - ".$YYYYYY." WHERE
我正在开发一个业余爱好应用程序。它在主布局中使用 webview。单击 webview 内的链接会使用户保持在 webview 内。启动后一切正常,但仍在应用程序内。但是,在手机休眠一段时间后,我重新
我目前运行的应用程序需要最大堆大小为 16GB。 目前我使用以下标志来处理垃圾回收。 -XX\:+UseParNewGC, -XX\:+UseConcMarkSweepGC, -XX:CMSIniti
$ uname -a Darwin Wheelie-Cyberman 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011
在 while 循环仍在休眠时退出它的最简单方法是什么?是否有某种函数可以在 sleep 时检测某个值是否为真? 或者我是否在循环中设置一个小 sleep 并检查如果不再睡一会儿就退出?如果可以,我该
我正在 Ubunu 的 Jetty 6 上运行 Java Web 服务器,用于基于反向 ajax 的 Web。而且我在向浏览器重新发送数据的线程滞后方面遇到了严重的问题。很多时候,一些线程开始 hib
当我运行长时间操作时,我遇到来自 IIS 的请求超时。我的 ASP.NET 应用程序正在后台处理数据,但处理的记录数量很大,因此操作需要很长时间。 但是,我认为 IIS 使 session 超时。这是
我不确定从哪里开始解决这个问题,但如果我有一个 AJAX 网络应用程序向服务器发送请求并在数据库(在我的例子中是 postgresql)上运行长查询,有没有办法停止或如果仍在运行时用户刷新页面或关闭
我是一名优秀的程序员,十分优秀!