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

构建本地对于AWS Lambda来说太慢了

何甫
2023-03-14

我从quarkus开始,我的构建本机速度太慢(超过一个小时,并已退出内存错误)。我删除了quarkus

有人知道为什么这种依赖会导致这种缓慢的构建吗?

QuarkusLambda教程:https://quarkus.io/guides/amazon-lambda

我的配置:

  • iMac 2011-i5 2.4Ghz-16Gb内存-无SSD

生成命令

mvn clean install -Pnative -Dnative-image.docker-build=true -Dquarkus.native.enable-jni=true
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <groupId>br.com.fwborges.alexa</groupId>
    <artifactId>skill-bus-locator</artifactId>
    <version>1.0</version>
    <properties>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <surefire-plugin.version>2.22.0</surefire-plugin.version>
        <maven.compiler.parameters>true</maven.compiler.parameters>
        <quarkus.version>1.5.1.Final</quarkus.version>
        <compiler-plugin.version>3.8.1</compiler-plugin.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-bom</artifactId>
                <version>${quarkus.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>

        <!-- AWS Lambda -->
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-amazon-lambda</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-test-amazon-lambda</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Test -->
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-junit5</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Database -->
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-hibernate-orm</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-hibernate-validator</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-hibernate-orm-panache</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-jdbc-mysql</artifactId>
        </dependency>

        <!-- Log -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.13.1</version>
        </dependency>

        <!-- Http Clients -->
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-undertow</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-rest-client</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy-jsonb</artifactId>
        </dependency>

        <!-- Utils -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-text</artifactId>
            <version>1.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
            <scope>provided</scope>
        </dependency>

        <!-- AWS Alexa SDK -->
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-amazon-alexa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.amazon.alexa</groupId>
            <artifactId>ask-sdk</artifactId>
            <version>2.29.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-maven-plugin</artifactId>
                <version>${quarkus.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${surefire-plugin.version}</version>
                <configuration>
                    <systemPropertyVariables>
                        <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <profiles>
        <profile>
            <id>native</id>
            <activation>
                <property>
                    <name>native</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>io.quarkus</groupId>
                        <artifactId>quarkus-maven-plugin</artifactId>
                        <version>${quarkus.version}</version>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>native-image</goal>
                                </goals>
                                <configuration>
                                    <enableHttpUrlHandler>true</enableHttpUrlHandler>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

生成日志:

[skill-bus-locator-lambda-1.0-runner:25]    classlist:  44,330.01 ms
[skill-bus-locator-lambda-1.0-runner:25]        (cap):   3,911.88 ms
[skill-bus-locator-lambda-1.0-runner:25]        setup:   9,214.88 ms
18:30:44,765 INFO  [org.hib.val.int.uti.Version] HV000001: Hibernate Validator 6.1.5.Final
18:30:45,188 INFO  [org.hib.Version] HHH000412: Hibernate ORM core version 5.4.16.Final
18:30:45,215 INFO  [org.hib.ann.com.Version] HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
18:30:45,322 INFO  [org.hib.dia.Dialect] HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
18:36:15,233 INFO  [org.jbo.threads] JBoss Threads version 3.1.1.Final
Exception in thread "native-image pid watcher" java.lang.OutOfMemoryError: Java heap space
[skill-bus-locator-lambda-1.0-runner:25]     analysis: 4,862,370.37 ms

Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "mysql-cj-abandoned-connection-cleanup"

谢谢


共有1个答案

滕璞瑜
2023-03-14

我不是AWS Lambdas ans qukus的专家。然而,我多年来一直致力于调优基于Java应用服务器,我在您的日志文件中看到了这一点。

18:36:15,233 INFO  [org.jbo.threads] JBoss Threads version 3.1.1.Final
Exception in thread "native-image pid watcher" java.lang.OutOfMemoryError: Java heap 
space

因此,部署过程似乎导致了内存不足(OOM)问题,这在速度缓慢的情况下是有意义的,因为在出现OOM错误之前,垃圾收集器已经花费了几个CPU周期来尽最大努力清理堆。

因此,可能是应用程序存在内存泄漏错误,或者堆配置不正确。

 类似资料:
  • 我正在为我的公司设计一个RoR项目,我们的开发团队已经遇到了一些关于设计的争论,特别是数据库。 我们有一个名为的模型,需要持久化。这是一个非常非常小的模型,除了 id 之外只有三个 db 列,但是当我们投入生产时,可能会有很多这样的模型。我们每天看到多达 1,000,000 次插入。模型将只能由其上的两个外键搜索,这些外键可以索引。同样,这些模型永远不必被删除,但我们也不必在它们大约三个月大后保留

  • 我在持久化LocalDate字段[在列中使用VARCHAR(20)类型]时收到以下错误: 字段定义如下: 我使用的是spring data starter(1.5.9版本)。它在内部使用hibernate 5.0.12。 根据博文https://www.thoughts-on-java.org/hibernate-5-date-and-time/ Hibernate 5,支持Java 8特性(Da

  • 我正在尝试构建 当我运行mvn时,它给出一个错误 如果我使用随机的,将在目标文件夹中创建jar文件,但是 只是好奇,正确的命令是什么?

  • 我们正在使用ApacheJMeter进行web应用程序的性能测试。显然,与加载期间在浏览器中加载页面相比,响应时间太长。当我们在加载期间打开页面时,它会在2秒内打开,但是JMeter报告70秒。我了解浏览器内存缓存和磁盘缓存在浏览器中使用,但JMeter缓存管理器是否也这样做。如何断言它,比较响应头是一个选项。对此有任何想法将不胜感激。

  • 问题内容: 我有一个Jenkins实例,该实例使用从requirements.txt中附带的PyPI包来构建我的项目。但是,与TravisCI构建一样,每次从头开始构建都非常耗时,并且意味着构建要花费> 4-5分钟,这比理想情况要慢得多。 我正在寻找的是一种在本地缓存下载的软件包的方法,因此,当启动具有相同依赖项的构建时,不必从PyPI获取它就可以在本地获取,而当版本发生更改时,它可以获取上游软件

  • 我有我的班级电影: 和我的控制器方法: 我得到一个错误: Servlet.service()的servlet[springDispatcher]在上下文与路径[/web编程]抛出异常[请求处理失败;嵌套异常org.springframework.dao.DataIntegrityViolationException:无法执行语句;SQL[n/a];嵌套异常是org.hibernate.except