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

在Azure应用服务中设置JVM堆选项

端木望
2023-03-14

我一直在尝试将一个应用程序部署到Azure应用程序服务(免费层),由于内存限制,该应用程序不断被杀死,因为它使用了太多内存。当然,解决这一问题的最简单方法是在启动时在JVM上设置Xmx900m,但是我尝试的方法到目前为止都不起作用。

我所尝试的:

  1. 将Xmx900m添加到web。config(配置)httpPlatform标签,位于参数属性(开始处)

我可以在Azure App Service Java应用程序中设置最大堆设置吗?

共有2个答案

胥玮
2023-03-14

我意识到这是一个较旧的线程,但以防有人偶然发现这个问题并希望现在解决此问题,答案取决于应用服务是在专用/高级计划还是消耗计划下运行。

对于在专用或高级计划下运行的应用程序服务,请使用JAVA\u OPTS应用程序设置。对于在消费计划下运行的应用程序服务,您可以使用“languageWorkers\uu java\uu arguments”应用程序设置。

您可以在这里了解更多信息,因为我们仍在等待主文档更新有关消费计划的差异。

https://github.com/Azure/azure-functions-java-worker/wiki/How-to-customize-JVM-options-on-Azure-Functions

江浩慨
2023-03-14

如果您在Kudu中有java进程,您可以使用jps检查java进程PID,然后在jdk/bin目录中使用jmap-heap[pid],您将获得堆内存详细信息。

如果没有,可以创建一个WebJob来获取详细信息。我得到了详细信息并把它放在队列中。下面是示例代码。

 public static  final String storageConnectionString =
        "DefaultEndpointsProtocol=https;" +
                "AccountName=******;" +
                "AccountKey=*********;" +
                "EndpointSuffix=core.windows.net";

public static void main( String[] args )
{


    MemoryMXBean memorymbean = ManagementFactory.getMemoryMXBean();
    MemoryUsage usage = memorymbean.getHeapMemoryUsage();
    System.out.println("INIT HEAP: " + usage.getInit()/(1024*1024));
    System.out.println("MAX HEAP: " + usage.getMax()/(1024*1024));
    System.out.println("USE HEAP: " + usage.getUsed()/(1024*1024));
    System.out.println("\nFull Information:");
    System.out.println("Heap Memory Usage: "
            + memorymbean.getHeapMemoryUsage());
    System.out.println("Non-Heap Memory Usage: "
            + memorymbean.getNonHeapMemoryUsage());


    CloudQueueMessage message=null;

    try {
        CloudStorageAccount storageAccount =
                CloudStorageAccount.parse(storageConnectionString);

        // Create the queue client.
        CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

        // Retrieve a reference to a queue.
        CloudQueue queue = queueClient.getQueueReference(**queuename**);

        // Create the queue if it doesn't already exist.
        queue.createIfNotExists();

        // Create a message and add it to the queue.
        CloudQueueMessage errormessage = new CloudQueueMessage("INIT HEAP: " + usage.getInit()+
                                                                        "MAX HEAP: " + usage.getMax()+
                                                                        "USE HEAP: " + usage.getUsed() +
                                                                        "Heap Memory Usage: " + memorymbean.getHeapMemoryUsage()+
                                                                        "Non-Heap Memory Usage: " + memorymbean.getNonHeapMemoryUsage());
        queue.addMessage(errormessage);

        // Download the approximate message count from the server.
        queue.downloadAttributes();

        // Retrieve the newly cached approximate message count.
        long cachedMessageCount = queue.getApproximateMessageCount();

        // Display the queue length.
        System.out.println(String.format("Queue length: %d", cachedMessageCount));
    } catch (URISyntaxException e) {
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    } catch (StorageException e) {
        e.printStackTrace();
    }
}

如果你还有问题,请告诉我。

 类似资料:
  • 我有一个部署在Azure应用服务上的NodeJS应用程序。用38 MB的文件做一个帖子,我得到一个404错误,但是在引擎盖下有一个IIS问题 要设置“maxAllowedContentLength”,我必须编辑“web”。配置文件。 这是不好的,因为如果我在Azure Portal应用程序设置上做一些更改,那么我的本地版本的web应用程序将无法运行。“配置”与自动生成的文件冲突。 是否可以以其他方

  • 问题内容: 大家好,我观察到在设置堆大小时人们倾向于使用值64,128,256,1024。如果我在这些数字之间输入一个值(例如500),jvm是否会接受该值?为什么这些数字很重要且更受欢迎?为什么我们也以这种模式升级RAM。 请帮助我理解。 在此先感谢哈宾 问题答案: JVM将接受任何值,这没有问题。使用2 ^ n值只是一个“惯例”,在实践中使用其他值不会有负面影响。

  • 将-Xms和-Xmx设置为相同的值有什么缺点吗?并将-XX:MaxPermSize和-XX:PermSize设置为相同的值。 建议在这里使用。 如果服务器中有足够的物理可用存储器,是否建议为两个选项设置更高的值? 更新: 环境Java1.6。Solaris 10的0_45 Java版本"1.6.0_45" Java(TM)SE运行时环境(build 1.6.0_45-b06) JavaHotSpo

  • 问题内容: 有没有办法从正在运行的Java程序中设置堆大小? 问题答案: 没有。 对于具有非常多的堆需求的应用程序,您可以做的是设置最大的堆大小-Xmx并进行调整,以使堆缩小时该应用程序不会挂在大量内存上(使用默认设置即可) )。 但是请注意,当应用程序实际使用的内存变化剧烈且快速时,这可能会导致性能问题-在这种情况下,最好将其挂在所有内存上,而不是仅将其退还给操作系统以声明使用它再过一秒钟。您可

  • 我试图使用Azure CLI配置Azure Web应用的应用程序日志记录(Blob)和Web服务器日志记录(存储)设置。 我正在使用以下命令创建存储容器: az存储容器创建--帐户名StorageAccName--名称ContainerName--身份验证模式登录 但是,我无法链接Web应用中的存储设置以使用新容器。 我在参考留档里找不到任何东西。 https://docs.microsoft.c

  • 我有一个Grails 2.3。X项目,除非使用命令行参数指定更多堆栈大小,否则无法编译。目前这很好,但每次我第一次构建项目时都需要导出/设置JVM选项。此外,刚开始项目的开发人员总是会遇到这个问题,所以我希望它成为签出版本控制的代码的一部分。 有没有办法在Grails 2.3中设置stacksize(-Xss)JVM选项。X BuildConfig? P、 Xss JVM选项是文档较少的选项之一。