标签: jetty

Java 17 的 parallelStream() 会导致在 Java 16 中正常运行的代码出现严重的性能问题。为什么?

我正在开发一款在 Java 16 上运行的 Jetty Web 应用程序。我尝试将其升级到 Java 17,但完全由一次调用parallelStream().

唯一的变化是 Java 版本从 16 提升到 17,--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED运行时openjdk:16.0.1-jdk-oraclelinux8openjdk:17.0.1-jdk-oraclelinux8.

我们设法获得了一个线程转储,其中包含许多内容:

"qtp1368594774-200" #200 prio=5 os_prio=0 cpu=475.94ms elapsed=7189.65s tid=0x00007fd49c50cc10 nid=0xd1 waiting on condition  [0x00007fd48fef7000]
   java.lang.Thread.State: WAITING (parking)
    at jdk.internal.misc.Unsafe.park(java.base@17.0.1/Native Method)
    - parking to wait for  <0x00000007b73439a8> (a java.util.stream.ReduceOps$ReduceTask)
    at java.util.concurrent.locks.LockSupport.park(java.base@17.0.1/LockSupport.java:341)
    at java.util.concurrent.ForkJoinTask.awaitDone(java.base@17.0.1/ForkJoinTask.java:468)
    at java.util.concurrent.ForkJoinTask.invoke(java.base@17.0.1/ForkJoinTask.java:687)
    at java.util.stream.ReduceOps$ReduceOp.evaluateParallel(java.base@17.0.1/ReduceOps.java:927)
    at java.util.stream.AbstractPipeline.evaluate(java.base@17.0.1/AbstractPipeline.java:233)
    at java.util.stream.ReferencePipeline.collect(java.base@17.0.1/ReferencePipeline.java:682)
    at com.stackoverflowexample.aMethodThatDoesBlockingIOUsingParallelStream()
Run Code Online (Sandbox Code Playgroud)

导致问题的代码类似于:

list.parallelStream()
.map(this::callRestServiceToGetSomeData)
.collect(Collectors.toUnmodifiableList());
Run Code Online (Sandbox Code Playgroud)

此图显示了从 jdk16(左轴)升级到 jdk17(中间的巨大尖峰),然后删除对parallelStream()仍然在 jdk17(右轴)上的调用之前的线程使用情况:

线程数

Java 17 (openjdk-17.0.1_linux-x64_bin.tar.gz) …

java jetty java-stream java-17

34
推荐指数
1
解决办法
4149
查看次数

Spring 3.1 WebApplicationInitializer和Embedded Jetty 8 AnnotationConfiguration

我正在尝试使用Spring 3.1和嵌入式Jetty 8服务器创建一个没有任何XML配置的简单webapp.

但是,我正在努力让Jetty认识到我对Spring WebApplicationInitializer接口的实现.

项目结构:

src
 +- main
     +- java
     |   +- JettyServer.java
     |   +- Initializer.java
     | 
     +- webapp
         +- web.xml (objective is to remove this - see below).
Run Code Online (Sandbox Code Playgroud)

上面的Initializer类是WebApplicationInitializer的一个简单实现:

import javax.servlet.ServletContext;
import javax.servlet.ServletException;

import org.springframework.web.WebApplicationInitializer;

public class Initializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        System.out.println("onStartup");
    }
}
Run Code Online (Sandbox Code Playgroud)

同样JettyServer是嵌入式Jetty服务器的简单实现:

import org.eclipse.jetty.annotations.AnnotationConfiguration;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.Configuration;
import org.eclipse.jetty.webapp.WebAppContext;

public class JettyServer {

    public static void main(String[] args) throws …
Run Code Online (Sandbox Code Playgroud)

java jetty spring-mvc embedded-jetty jetty-8

33
推荐指数
3
解决办法
3万
查看次数

Jetty Cross Origin过滤器

我已配置Jetty的跨源过滤器,但我继续收到以下错误.有谁知道什么是错的以及如何解决它?错误消息下面是我的覆盖描述符(即补充web.xml)

错误:

Origin http://localhost:8090 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)

覆盖描述符:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
 <filter>
   <filter-name>cross-origin</filter-name>
   <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
   <init-param>
       <param-name>allowedOrigins</param-name>
       <param-value>*</param-value>
   </init-param>
   <init-param>
       <param-name>allowedMethods</param-name>
       <param-value>*</param-value>
   </init-param>
   <init-param>
       <param-name>allowedHeaders</param-name>
       <param-value>*</param-value>
   </init-param>
 </filter>
 <filter-mapping>
     <filter-name>cross-origin</filter-name>
     <filter-pattern>/*</filter-pattern>
 </filter-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)

请求标题

Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:Origin, Content-Type, Accept
Access-Control-Request-Method:POST
Connection:keep-alive
Host:localhost:8080
Origin:http://localhost:8090
Referer:http://localhost:8090/home
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.8 (KHTML, like Gecko) Chrome/17.0.942.0
Run Code Online (Sandbox Code Playgroud)

响应标题

Allow:POST,GET,OPTIONS,HEAD
Content-Length:0
Date:Wed, 30 Nov 2011 02:13:21 GMT
Server:Jetty(7.5.4.v20111024)
Run Code Online (Sandbox Code Playgroud)

java ajax jetty cross-domain cors

32
推荐指数
4
解决办法
5万
查看次数

在IntelliJ中调试Web应用程序,由maven构建的webapp,由jetty运行

我正在使用s/o代码,它是由maven构建的java webapp.webapp由maven脚本运行,如下所示,应用程序在localhost:8080上运行,:

<build>
        <plugins>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>8.1.8.v20121106</version>
                <configuration>
                    <contextPath>/</contextPath>
                    <connectors>
                        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                            <!--<port>8085</port>-->
                            <port>8080</port>
                            <maxIdleTime>60000</maxIdleTime>
                        </connector>
                    </connectors>
                    <stopKey>stop</stopKey>
                    <stopPort>8089</stopPort>
                </configuration>
            </plugin>            
        </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

我想附加IntelliJ的调试器,以便我可以单步执行代码.我尝试设置一个调试器配置,如:Jetty Server,然后是'Remote',但它说没有指定Application Server.我也试过'Local',它说'主配置文件不包括'.

那么我该怎么做才能附加调试器?提前致谢.

debugging web-applications jetty intellij-idea maven-jetty-plugin

32
推荐指数
2
解决办法
3万
查看次数

远程调试Jetty(没有mvn,没有插件)

过去的场景
- 使用Tomcat并以调试模式启动并使用Eclipse进行远程调试.
- 在此调试/远程端口中定义端口并与eclipse连接.
- 用于调试其他主机/服务器中的服务器

今天的场景
现在,我正在使用 Jetty而且我也尝试过这样做,但是没有成功,有人可以帮助我吗?
我没有使用Maven,也不想从Eclipse中启动Jetty.

环境:
Windows XP
Java V. 5
Jetty V. 6.1.15

链接:
http:// docs.codehaus.org/display/JETTY/Debugging
这对我没有帮助!
HTTP:// docs.codehaus.org/display/JETTY/Debugging+Jetty+with+Eclipse
HTTP:// neelzone.wordpress.com/2007/06/18/jetty-and-eclipse-integration
这些是启动内部的Eclipse

eclipse debugging remote-debugging jetty

31
推荐指数
3
解决办法
4万
查看次数

如何防止spring-security附加; jsessionid = XXX登录重定向?

当未经身份验证的客户端请求需要非匿名访问级别的URL时security-config.xml,spring security会将HTTP重定向发送到我们的登录页面(例如/login).没关系.

问题是,如果没有现有会话(由客户端请求中提供的cookie标识),spring-security会发出重定向,该重定向也指定客户端在URL中的新会话,例如/login;jsessionid=8o7pglapojus.

许多容器支持这个(显然在Tomcat中正常工作?),但现在看来,码头(这就是我们现在正在使用)不-重定向的URL来通过我们的网址路由器完全不变(包括jsessionid"参数"),并且命名会话不与/loginjetty/spring-security 的请求相关联(即,在对/login请求的响应的Set-Cookie头中提供了全新的会话ID ).

我们可以通过匹配/login.*我们的路由来解决这个问题,但我很好奇是否有任何方法可以防止在身份验证重定向中发出会话ID.

tomcat servlets jetty spring-security

31
推荐指数
2
解决办法
3万
查看次数

如何创建嵌入式WebSocket服务器Jetty 9?

我讨厌问这么模糊的问题,但我很难找到一个简单的例子.这是我到目前为止所拥有的:

public class JettyWebSocketServlet extends WebSocketServlet{
    @Override
    public void configure(WebSocketServletFactory factory) {
        factory.register(MyEchoSocket.class);
    }
}

@WebSocket
public class MyEchoSocket {
    @OnWebSocketMessage
    public void onText(WebSocketConnection conn, String message) {
        System.out.println("text: " + message);
        try {
            conn.write(null, new FutureCallback(), "got: " + message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以找到的嵌入式Jetty示例总是显示如下所示,以启动Server实例运行,但我不知道如何实例化我的WebSocketServlet.

        Server server = new Server(8080);
        server.start();
        server.join();
Run Code Online (Sandbox Code Playgroud)

如何创建可以处理WebSocket连接请求的嵌入式服务器?

java jetty embedded-jetty websocket

31
推荐指数
2
解决办法
4万
查看次数

在Jetty上配置SSL

我正在尝试在我的Jetty上配置SSL.

我读到这个:http: //docs.codehaus.org/display/JETTY/How+to+configure+SSL 并创建了一个密钥库.

然后,我直接跳到第4节.但是这个配置文件在哪里我应该配置Jetty?

我试图搜索jetty.xml,但我的计算机上没有这样的...

ssl jetty

30
推荐指数
3
解决办法
6万
查看次数

-XX:OnOutOfMemoryError ="kill -9%p"问题

尝试将-XX:OnOutOfMemoryError="kill -9 %p"命令传递给我的jvm args时遇到问题.

我正在使用Jetty7,并在start.ini文件中使用它.在启动时,它给出了以下错误.这是jre /jre1.6.0_03l64

启动Jetty:STARTED Jetty Tue Apr 26 09:54:26 EDT 2011
无法识别的选项:-9
无法创建Java虚拟机.

start.ini文件如下所示.

#===========================================================
# If the arguements in this file include JVM arguments
# (eg -Xmx512m) or JVM System properties (eg com.sun.???),
# then these will not take affect unless the --exec
# parameter is included or if the output from --dry-run
# is executed like:
#   eval $(java -jar start.jar --dry-run)
#
# Below are some recommended options for Sun's JRE
#----------------------------------------------------------- …
Run Code Online (Sandbox Code Playgroud)

java jvm jetty

30
推荐指数
2
解决办法
3万
查看次数

如何在请求随机可用端口后发现嵌入式Jetty端口?

Server server = new Server(0);   
(..)
server.start();
// this returns _zero_ ?!?!
int listeningPort = server.getConnectors()[0].getPort();
Run Code Online (Sandbox Code Playgroud)

我正在使用嵌入式Jetty 7 API.将零传递给Server(int)构造函数会导致Jetty自动分配可用端口,如何才能发现分配了哪个端口?

我已阅读文档,但无法找到此信息.

谢谢..

java jetty

30
推荐指数
2
解决办法
8586
查看次数