用户在上传图片的时候,系统会报异常 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了好几天  : )

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

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

    百度统计API gzdecode($preLogin->retData, strlen($preLogin->retData)) 这段代码会造成一个PHP警告内存不足,解决办法只要换个解压 ...

  2. SQL执行SQL语句提示 "内存不足"(insufficient memory....)的解决方法

    由于本地执行的sql script的文件太大但是本地sql的运行内存有限,当我在MSSql的工具上运行这份178M左右的脚本的时候 它会提示 如下错误(Insufficient memory to c ...

  3. insufficient memory to configure kdump(没有足够的内存)解决方法(待验证、待解决)

    vritualbox上安装redhat 6.4 32位系统 在安装完成重启后开始进行一些初始化的配置,在最后一项是配置Kdump 看到这个"没有足够的内存配置kdump"(在英文界 ...

  4. ORA-12801/ORA-12853: insufficient memory for PX buffers: current 274880K, max needed 19722240K/ORA-04031解决方法

    近日,现场一台服务器在运行时出现下列异常: ORA-12801: error signaled in parallel query server P139 ORA-12853: insufficien ...

  5. 【JVM】linux上tomcat中部署的web服务,时好时坏,莫名其妙宕机,报错:There is insufficient memory for the Java Runtime Environment to continue.

    =========================================================================================== 环境: linu ...

  6. idea Error: java: OutOfMemoryError: insufficient memory处理

    在更新项目代码或者运行项目时报错 OutOfMemoryError: insufficient memory,解决方式如下: 方式1: 点击file,选择Invalidate Caches 进行清理一 ...

  7. CentOS 8.2远程连接vncserver升级后1.10.1无法启动解决记录

    CentOS 8.2远程连接vncserver升级后1.10.1无法启动解决记录   问题起源:手贱yum upgrade,重启服务器后无法使用vnc viewer远程连接 查看状态 # system ...

  8. idea Error: java: OutOfMemoryError: insufficient memory 的处理

    idea Error: java: OutOfMemoryError: insufficient memory处理 在更新项目代码或者运行项目时报错 OutOfMemoryError: insuffi ...

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

    ie6,ie7,ie8 css bug兼容解决记录 转载自:ie6,ie7,ie8 css bug兼容解决记录 - 前端开发 断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面 ...

随机推荐

  1. 两个inline-block中间有空白,解决inline-block 元素之间的空白问题

    目录 一.遇到的问题 二.举个简单的栗子分析问题 三.解决办法 一.遇到的问题 前些天写瀑布流布局的时候,发现明明计算好了宽度使得一行能放下三张图片,实际效果却总是放不下,图片会挤到下一行去.上图: ...

  2. [Abp vNext 源码分析] - 文章目录

    一.简要介绍 ABP vNext 是 ABP 框架作者所发起的新项目,截止目前 (2019 年 2 月 18 日) 已经拥有 1400 多个 Star,最新版本号为 v 0.16.0 ,但还属于预览版 ...

  3. Linux知识要点(文件压缩打包解压缩)

    tar 的选项与参数非常的多!我们只讲几个常用的选项,更多选项您可以自行 man tar 查询啰! 其实最简单的使用 tar 就只要记忆底下的方式即可(gzip方式): 压 缩: tar -zcvf ...

  4. TabTopAutoLayout【自定义顶部选项卡区域(带下划线)(动态选项卡数据且可滑动)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 自定义顶部选项卡布局LinearLayout类,实现带下划线且可滑动效果.[实际情况中建议使用RecyclerView] 备注:如果 ...

  5. LindDotNetCore~授权中间件的介绍

    回到目录 LindDotNetCore中间件 大叔认识中间件就是主要对http请求进行拦截,然后添加具体个性化功能的逻辑,这种把请求切开,添加新逻辑的方式一般称为面向方面的逻辑AOP! 授权中间件 请 ...

  6. ASP.NET Core 2.1的配置、AOP、缓存、部署、ORM、进程守护、Nginx、Polly【源码】

    ps:废话不多说.直接上代码:源码地址:https://github.com/786744873/Asp.Net-Core-2.1-All-Demos/tree/master/src Configur ...

  7. c#文件图片操作

    系统特殊目录路径 //取得特殊文件夹的绝对路径 //桌面 Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //收藏夹 Env ...

  8. Excel自动换行、Export2Excel 自动换行

    1需求:导出excel后自动换行显示. 2插件:Export2Excel 3.测试 listToExcel() { import('@/vendor/Export2Excel').then(excel ...

  9. 微信web页面返回刷新

    问题:在微信web页面开发的过程中,会遇到返回上一个页面数据没有刷新的情况. 解决方案:在该页面监控用户的浏览,每次加载都刷新页面. window.onpageshow = function(even ...

  10. Nginx Windows详细安装部署教程

    一.Nginx简介 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Ramble ...