我一直在尝试将一个应用程序部署到Azure应用程序服务(免费层),由于内存限制,该应用程序不断被杀死,因为它使用了太多内存。当然,解决这一问题的最简单方法是在启动时在JVM上设置Xmx900m,但是我尝试的方法到目前为止都不起作用。
我所尝试的:
我可以在Azure App Service Java应用程序中设置最大堆设置吗?
我意识到这是一个较旧的线程,但以防有人偶然发现这个问题并希望现在解决此问题,答案取决于应用服务是在专用/高级计划还是消耗计划下运行。
对于在专用或高级计划下运行的应用程序服务,请使用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
如果您在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选项是文档较少的选项之一。