【问题标题】:Vertx load a huge javascript file - Thread blockedVertx 加载一个巨大的 javascript 文件 - 线程被阻止
【发布时间】:2016-05-11 09:09:13
【问题描述】:

此时,我创建了一个示例 github 项目 - https://github.com/marcelalburg/vertx-hugejson-thread-block-example

我的问题是,vertx 在 js 文件部署期间阻塞了我的线程。

src/main/resources 中的 server.js 文件大约 4mb 大 - 这应该模拟我的 react redux 服务器端渲染文件(这个是 aprox 1.2 mb 纯 javascript)。

在部署过程中,nashorn 引擎尝试加载文件,在解析过程中,vertx 被阻塞。

有没有人有想法,我怎样才能防止这种阻塞?

谢谢马塞尔

【问题讨论】:

    标签: vert.x


    【解决方案1】:

    这真的有问题吗?我的项目中也有类似的Thread blocked 日志,其中泽西岛(我使用的是https://github.com/englishtown/vertx-jersey)需要很长时间才能启动。

    To quote the documentation:

    如果你这样做,那么事件循环在被阻塞时将无法做任何其他事情。如果您阻止 Vertx 实例中的所有事件循环,那么您的应用程序将完全停止!

    您不需要(并且可能想要)处理其他请求,包括客户端请求,所以对我来说,在这个阶段阻止事件循环是完全可以的。

    【讨论】:

    • 好吧,这更像是我的问题。这意味着,如果在服务启动期间发生阻塞,则可以。我很好,我只是想问是否有人有类似的“问题”,也许是一个修复。我用一个特殊的健康端点解决了这个问题,如果这个端点返回“ok”,则允许服务进入负载均衡器。
    【解决方案2】:

    我不确定我是否理解你的问题,但它对我来说加载速度很快:

    gorre@doom $ java -jar target/application.jar
    May 11, 2016 10:39:47 AM com.hazelcast.instance.DefaultAddressPicker
    INFO: [LOCAL] [dev] [3.5.2] Prefer IPv4 stack is true.
    May 11, 2016 10:39:47 AM com.hazelcast.instance.DefaultAddressPicker
    INFO: [LOCAL] [dev] [3.5.2] Picked Address[192.168.99.1]:5701, using socket ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=5701], bind any local is true
    May 11, 2016 10:39:47 AM com.hazelcast.spi.OperationService
    INFO: [192.168.99.1]:5701 [dev] [3.5.2] Backpressure is disabled
    May 11, 2016 10:39:47 AM com.hazelcast.spi.impl.operationexecutor.classic.ClassicOperationExecutor
    INFO: [192.168.99.1]:5701 [dev] [3.5.2] Starting with 4 generic operation threads and 8 partition operation threads.
    May 11, 2016 10:39:47 AM com.hazelcast.system
    INFO: [192.168.99.1]:5701 [dev] [3.5.2] Hazelcast 3.5.2 (20150826 - ba8dbba) starting at Address[192.168.99.1]:5701
    May 11, 2016 10:39:47 AM com.hazelcast.system
    INFO: [192.168.99.1]:5701 [dev] [3.5.2] Copyright (c) 2008-2015, Hazelcast, Inc. All Rights Reserved.
    May 11, 2016 10:39:47 AM com.hazelcast.instance.Node
    INFO: [192.168.99.1]:5701 [dev] [3.5.2] Creating MulticastJoiner
    May 11, 2016 10:39:47 AM com.hazelcast.core.LifecycleService
    INFO: [192.168.99.1]:5701 [dev] [3.5.2] Address[192.168.99.1]:5701 is STARTING
    May 11, 2016 10:39:50 AM com.hazelcast.cluster.impl.MulticastJoiner
    INFO: [192.168.99.1]:5701 [dev] [3.5.2]
    
    
    Members [1] {
        Member [192.168.99.1]:5701 this
    }
    
    May 11, 2016 10:39:50 AM com.hazelcast.core.LifecycleService
    INFO: [192.168.99.1]:5701 [dev] [3.5.2] Address[192.168.99.1]:5701 is STARTED
    May 11, 2016 10:39:50 AM com.hazelcast.partition.InternalPartitionService
    INFO: [192.168.99.1]:5701 [dev] [3.5.2] Initializing cluster partition table first arrangement...
    May 11, 2016 10:39:50 AM example.TestApplication
    INFO: Cluster ready, starting verticle deploy
    May 11, 2016 10:39:52 AM server.js
    INFO: vertxStartAsync
    May 11, 2016 10:39:53 AM example.TestApplication
    INFO: Done
    

    更新:我认为,在这种情况下(并且主要针对可能正在做同样事情的其他所有人),您主要是从文件中读取 data。如果是这种情况,您也可以启动“服务器”并启动异步调用以读取文件,然后稍后提供其内容。以这种方式,您不会阻塞您的事件循环,这就是我认为您现在正在发生的事情。

    【讨论】:

    • 嗯,比你的机器快。但是相信我,如果你有一个真正的大型 Javascript,你会看到 Thread Blocked 消息。也许你可以在你的电脑上制造一些背景噪音......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多