关于 insufficient memory case 4 的解决记录

用户在上传图片的时候,系统会报异常 insufficient memory case 4,追踪代码发生在jdk中 image.io 的 read() 方法。这是一个耽搁了很久的bug,客户反馈了好几次,找了几次方向都没处理好,搞得客户很不耐烦,我自己也很伤脑筋,差点就投降了。

我尝试过本地测试复现,但是也只是在多线程同时并发才会出现,线上出现该异常的时候,只有一个人在使用,所以当时也是很疑惑。对于内存不足来说,这个和内存溢出OutOfMemoryError是不一样的,后者往往是分配给JVM的内存不足,前者实际上可能更多是物理本地内存不足(当然,这是后来才知道的)

在找寻解决方案的过程中,看到了 github 上的一个issue:Exception generating thumbnail image: Insufficient memory (case 4)

其中有段回复是这样说明的:“Summing it up, I‘m going to guess that the situation is that the JVM has enough memory allocated to it by the OS, but the JPEG decoder which is (probably) calling native code of libjpeg, and libjpeg is unable to obtain more free memory from the OS. You may want to look at how much (virtual) memory that the OS has free at the time you encounter this error. If my guess is correct, it would mean that you‘ll need to reduce the amount of parallel processing, and adding more heap (-Xmx) to the JVM probably isn‘t going to alleviate the situation.”

可以看到,他说可能的原因在于JVM的内存是足够的,但是在调用一些其他非Java代码的接口,即native方法时,这些方法无法从系统中获取到足够使用的物理内存,于是造成了该异常。方向有了,看看服务器整体物理内存的使用情况。

于是我在客户告知我异常时,登陆服务器查看了内存的使用,服务器是8G内存,当时显示已使用内存高达7.9G(吃惊,怎么这么高),其中有个进程占用高达5G以上,是谁呢?sqlserver.exe(当时就惊了)

这是因为sqlserver.exe默认使用的策略是用多少内存占多少内存,只有服务器内存不足才会释放一些。这些内存多用来进行 “查询出的数据缓存” 和 “执行命令缓存”,所以解决方法其实很简单,调整sqlserver的可使用物理内存即可(图来自网络):

我把sqlserver的内存使用限制在了3G,之后问题便迎刃而解。那句话怎么说来着,改代码两分钟,DEBUG两小时,说得真没错,关键是我DEBUG了好几天  : )

原文地址:https://www.cnblogs.com/deng-cc/p/10296001.html

时间: 2024-08-05 11:19:23

关于 insufficient memory case 4 的解决记录的相关文章

[转]解决百度统计 gzdecode(): insufficient memory

百度统计API gzdecode($preLogin->retData, strlen($preLogin->retData)) 这段代码会造成一个PHP警告内存不足,解决办法只要换个解压缩函数即可. gzdecode($preLogin->retData, strlen($preLogin->retData))  改成 gzinflate(substr($preLogin->retData,10,-8)) 即可. 来源: ->简单的解决 百度data API数据统计:

There is insufficient memory for the Java Runtime Environment to continue问题解决

在linux系统下长时间进行性能测试,连续几次发生服务器假死无法连接上的情况,无奈只能重启服务器.在测试路径下发现hs_err_pid17285.log文件,打开文件查看其主要内容如下: # There is insufficient memory for the Java Runtime Environment to continue.# Cannot create GC thread. Out of system resources.# Possible reasons:#   The sy

【初学python】错误SSLError: [Errno 1] _ssl.c:504:的解决记录

最近在实习公司学习使用python做web自动化测试,其中使用到httplib这个模板,主要用于与待测试界面建立HTTP连接,发送数据请求,接收请求状态码和查询数据,验证功能.但是新版本的web界面改成使用https协议,原来的测试用例都变成无法跑通的状态. 将协议从HTTP改成HTTPS后,报以下错误: SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown proto

opencv mac macOS Sierra 报错 'QTKit/QTKit.h' file not found 解决记录

在安装opencv时如果升级了macOS Sierra可能会遇到如下错误: XXX/cap_qtkit.mm:46:9: fatal error: 'QTKit/QTKit.h' file not found #import ^ 1 error generated. make[2]: *** [modulesideoio/CMakeFiles/opencv_videoio.dir/src/cap_qtkit.mm.o] Error 1 make[1]: *** [modulesideoio/CM

OpenCV Error: Insufficient memory问题解析

前言 项目程序运行两个月之久之后突然挂了,出现OpenCV Error: Insufficient memory的错误,在此分析一下该问题. 问题的表现形式: 程序内存使用情况: 问题: OpenCV Error: Insufficient memory (Failed to allocate 262144 bytes) in cv::OutOfMemoryError, file C:\builds\2_4_PackSlave-win64-vc12-shared\opencv\modules\c

ie6,ie7,ie8 css bug兼容解决记录

ie6,ie7,ie8 css bug兼容解决记录 转载自:ie6,ie7,ie8 css bug兼容解决记录 - 前端开发 断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面记录下来了!希望以后解决类似问题的时候能够快速解决 ,也希望大家能在留言里面跟进自己发现的ie6 7 8bug和解决办法! 1:li边距“无故”增加 任何事情都是有原因的,li边距也不例外. 先描述一下具体状况:有些时候li边距会突然增 加很多,值也不固定(只在IE6/IE7有这种现象),让人摸不着

contact表单错误解决记录

在上篇表单验证中,过程中可谓坎坷,记录一下错误问题及解决方案. 我们用到的模板contact_form.html如下,其他urls.py自行去修改. <html> <head> <title>Contact us</title> </head> <body> <h1>Contact us</h1> {% if errors %} <ul> {% for error in errors %} <

解决记录:win10 无法安装VS2017,visual studio installer下载进度始终为0

问题描述:win10 下无法安装VS2017,visual studio installer下载进度始终为0,点击取消按钮后,也没有反应,visual studio installer也关闭不掉: 具体问题详见 博问:https://q.cnblogs.com/q/106027/          微软问题:https://social.msdn.microsoft.com/Forums/zh-CN/baafa177-158d-4130-bc64-330b7b32a14c/win10-vs201

django错误笔记——TypeError: view must be a callable or a list/tuple in the case of include().解决办法

django增加用户认证模块时,总是提醒模块的url.py中 url(r'^login/$', 'django.contrib.auth.views.login', name='login'),出错: TypeError: view must be a callable or a list/tuple in the case of include(). 解决办法:改为下面的写法 from django.contrib.auth.views import login ... url(r'^logi