【问题标题】:Gradle excecution freezes for 3 mins for certain tasks对于某些任务,Gradle 执行冻结 3 分钟
【发布时间】:2020-04-24 10:53:37
【问题描述】:

我有 2 个相对简单的 Gradle 6.1.1 配置,一个是使用 https://plugins.gradle.org/plugin/com.github.node-gradle.node 构建一个 react 应用程序,另一个是基于 https://plugins.gradle.org/plugin/com.bmuschko.tomcat 并在嵌入式 tomcat 中运行一个简单的 wicket 应用程序。

npm 任务的第一个配置是:

apply plugin: 'com.github.node-gradle.node'
node {
    version = '12.16.0'
    download = true
    workDir = file "$project.buildDir/nodejs"
}

task "npmBuild"( type:NpmTask ) {
    args = [ 'run', 'build' ]
}

并在 Windows 10 中产生以下输出:

>gradlew.bat npmBuild
Starting a Gradle Daemon (subsequent builds will be faster)

> Task :npmBuild

> layer-selection@0.1.0 build .....
> react-scripts build

Creating an optimized production build...
Compiled with warnings.

...
Search for the keywords to learn more about each warning.
To ignore, add // eslint-disable-next-line to the line before.

File sizes after gzip:

  90.99 KB  build\static\js\2.17f9cda1.chunk.js
  28.68 KB  build\static\css\2.2f7f14af.chunk.css
  3.43 KB   build\static\js\main.1150707e.chunk.js
  778 B     build\static\js\runtime-main.989054bd.js
  177 B     build\static\css\main.f7c0afb8.chunk.css
...
Find out more about deployment here:

  bit.ly/CRA-deploy

此时任务持续了大约。 20 秒,然后在 CPU 负载低于 1% 的情况下挂起 3 分钟并继续:

BUILD SUCCESSFUL in 3m 18s
2 actionable tasks: 1 executed, 1 up-to-date

奇怪的是,在另一台 Win10 机器上的类似项目上运行相同的配置会导致干净运行而不会冻结。

还有任务:

task "npm-install"( type:NpmTask ) {
    args = [ 'install' ]
}
task "npm-set-proxy"( type:NpmTask ) {
    args = [ 'config', 'set', 'https-proxy', 'http://www.www.www:80/' ]
}

显示相同的额外 3 分钟行为。

第二个配置如下:

apply plugin: 'com.bmuschko.tomcat'

ext.tomcatVersion = '9.0.30'

dependencies {
    // some deps    

    tomcat "org.apache.tomcat.embed:tomcat-embed-core:$tomcatVersion",
            "org.apache.tomcat.embed:tomcat-embed-logging-juli:9.0.0.M6",
            "org.apache.tomcat.embed:tomcat-embed-jasper:$tomcatVersion",
            "org.apache.tomcat:tomcat-jdbc:$tomcatVersion",
            "org.apache.tomcat:tomcat-dbcp:$tomcatVersion"
            'org.postgresql:postgresql:42.2.12'
            'log4j:log4j:1.2.17'
}

tomcat {
    httpProtocol = 'org.apache.coyote.http11.Http11Nio2Protocol'
    ajpProtocol  = 'org.apache.coyote.ajp.AjpNio2Protocol'
    httpPort = 8088
}

并在Win10中产生输出:

>gradlew.bat tomcatRun
> Configure project :
> Task :compileJava
> Task :processResources UP-TO-DATE
> Task :classes
> Task :tomcatRun

此时它再次挂起大约 3 分钟,CPU 负载低于 18%,然后继续:

LOG .......
LOG  2020-04-24 12:45:10,971 [Execution worker for ':'] INFO :   - ActiveMq URL tcp://localhost:61620
Started Tomcat Server
The Server is running at http://localhost:8088/racy10
<=========----> 75% EXECUTING [4m 2s]

因此(根据我的 POV)无缘无故地在某些任务之后或之前 gradle 执行挂起 3 分钟。

欢迎任何提示和想法!

TIA

【问题讨论】:

  • 在没有 Gradle 的情况下,npm run build 需要多长时间?我认为您可能会在那里度过大部分“冻结”时间。
  • npm run build 最多需要 20 秒
  • 尝试使用--info 和/或--debug 运行构建。愿这会给你一个线索。
  • @thokuest 对 gradle 用户来说没有什么特别之处。我在 gradle 论坛上发布了一个带有一些痕迹 discuss.gradle.org/t/… 的问题
  • 对于此类问题,我总是会创建一个build scan 并检查一下。

标签: java node.js tomcat gradle embedded-tomcat


【解决方案1】:

检查%userprofile%\.gradle目录的权限,这是常见的罪魁祸首。在 Windows 10 上,这可能会受到 Windows Defender 的影响,但这只会减慢一点速度。直接从建议的命令行运行它时测试它的行为,因为这将有助于缩小根本原因。相反,使用Exec 任务也可能是一个选项,它可以提供对 CLI 的完全控制;对于example

【讨论】:

  • 我从 moowork 插件开始,但不得不切换到它的 fork。在我的尝试中,它显示了相同的 +3 分钟行为
  • 当你直接从命令行运行它时? Tomcat 项目或服务器可能是原因,以防不同的 Gradle 插件显示相同的行为......或用户配置文件(取决于运行它的用户而异)。甚至尝试过gradlew :tomcatRun?这仅运行该任务;曾经从 CLI 运行过 Tomcat 吗?尝试用Exec 替换(就像我的示例显示node)并且它不应该卡住......这可能在版本之间有所不同;另一个版本的 Tomcat 最终可能不会停止。
  • 如果不是Tomcat服务器本身;你可以在那里提交issue...我的意思是,如果它不是 NPM 插件,那么它可能是 Tomcat 插件或 Tomcat 服务器。因为我无法复制它;我只能告诉如何缩小可能性。
猜你喜欢
  • 2018-12-25
  • 2020-06-22
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多