我的webjob做得很少,下载大约3kb的数据然后更新我的数据库中的一些信息。然而,在webjob启动之后,当它下载信息时(或之后)抛出异常
[07/27/2014 00:12:47 > b2b30d: ERR ] Unhandled Exception: OutOfMemoryException.
为什么会出现这种情况?
我已经在本地运行了具有完全相同数据的exe并且它使用最少的内存,我已经看到最多65mb但我不认为这足以导致异常(或者是否有对webjobs的限制?)
我的内存使用统计信息(在Azure仪表板上)显示512 MB /小时的54%(似乎我使用了很多,但仍有很多可用)。 文件系统存储1024 MB的9% 我正在使用共享托管计划模式。
在抛出异常之前,数据库未被命中,因此这不是数据库问题。
更新 - 使用System.Diagnostic
在Azure上的诊断信息[07/28/2014 09:07:19 > b2b30d: INFO] WorkingSet64:10.54297
[07/28/2014 09:07:19 > b2b30d: INFO] TotalPhysicalMemory:14335.55
[07/28/2014 09:07:19 > b2b30d: INFO] AvailablePhysicalMemory:8458.691
[07/28/2014 09:07:20 > b2b30d: INFO] OutOfMemoryException
[07/28/2014 09:07:20 > b2b30d: INFO] WorkingSet64:41.33594
[07/28/2014 09:07:20 > b2b30d: INFO] TotalPhysicalMemory:14335.55
[07/28/2014 09:07:21 > b2b30d: INFO] AvailablePhysicalMemory:8443.027
所以,我的程序启动并使用10mb,做了一些工作,然后抛出一个outofmemoryexception,在内存异常被抛出的时候,内存增加到41mb。我不会认为使用41mb的exe对于webjob来说太多了,为什么会这样?
答案 0 :(得分:1)
修改Batch Size属性,如下所示
JobHostConfiguration config = new JobHostConfiguration();
//This asserts that the number of parallel calls of the function is one
config.Queues.BatchSize = 1;
var host = new JobHost(config);
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
通过这样做,您的webjob的每个实例一次调用一次main函数而不是并行调用。 祝你好运!
答案 1 :(得分:0)
此博客似乎暗示
'虽然您可以在免费或共享网站中尝试连续作业,但它只能在具有“始终开启”设置的标准网站中正常工作,这是因为在免费/共享网站中,作业流程将是在大约20分钟没有请求之后关闭(对工作流程的请求可以是检查当前工作的状态)。'
http://blog.amitapple.com/post/73574681678/git-deploy-console-app/#.VA7TEmcXJ3V