`

纯Java方式解析图片导致CPU过高

 
阅读更多

问题概述

1.1    问题概述
项目上线一段时间后,最近几天 在访问量不是很大的情况下 CPU持续上涨 只能通过手动重启Tomcat才能解决问题

 问题分析定位

1.2.1    分析结果
JDK中处理图片的对象 MediaTracker的BUG
 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6818960
为了解决此类问题,我们通过其它方式来避免JDK这个BUG,但是会存在图片失真的风险;



 

1.2.2    分析过程
通过部署我们提供的CPU监控脚本,发现其中有一个线程一直占用CPU 直至CPU超出预警线。线程信息 如下截图:
 
我们单独写了单元测试类,专门测试解析图片代码 并且使用 Jconsole 工具进行监控,最终找到一处处理CMYK的图片代码有异常. 而Oracle官方论坛也有此类问题的讨论
https://cn.forums.oracle.com/forums/thread.jspa?messageID=5358460

 

 

Image  image=Toolkit.getDefaultToolkit().getImage(imgFilePath);
//如果图片路径是不变,那么上面方法返回的 Image 对象就会是最开始那一个,通过对返回的 Image 调用 flush 方法,可以手动丢弃以前加载的信息
						image.flush();
						MediaTracker mediaTracker = new MediaTracker(new Container());
						mediaTracker.addImage(image, 0);
						mediaTracker.waitForID(0);

 既然这个有BUG ,那么我们不得不采用

Image image=ImageIO.read(file);
 

但是 ,ImageIO.read()方法无法读取CMYK编码的JPEG图片,见附件(cmyk_dog.jpg)

可以用以下方法解决:

http://stackoverflow.com/questions/2408613/problem-reading-jpeg-image-using-imageio-readfile-file

但是存在图片失真问题 ,

这个后期解决.......

 

 

  • 大小: 12 KB
  • 大小: 38.1 KB
  • 大小: 100.1 KB
分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA上百实例源码以及开源项目

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA上百实例源码以及开源项目源代码

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包4

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA实现Modbus RTU或Modbus TCPIP数据采集.rar

    如果线程计算部分不多,更多的线程只会导致频繁的切换上下文,让CPU的时间更多的花在线程调度而不是任务执行上。 3.java同步的几种方式:synchronized,volatile,显示锁,原子变量,线程及对象的基础同步方法。 ...

    java源码包3

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包2

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

    快速、简洁、解决大文件内存溢出的java处理Excel工具 .rar

    几番定位查找发现是在读取excel的时候导致此问题的发生,因此在通常使用的为POI的普通读取,在遇到大数据量excel,50mb大小或数十万行的级别的数据容易导致读取时内存溢出或者cpu飙升。需要注意,本文讨论的是针对...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

    java面试题

    解析XML文档有哪几种方式? 14 28. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 15 29. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)...

    令牌桶算法,漏桶算法,与计数器算法限流算法与Guava RateLimiter源码解析.docx

    在分布式系统中,应对高并发访问时,缓存、限流、降级是保护系统正常运行的常用方法。...还有一些资源消耗过大的请求,比如数据导出等(参考 记一次线上Java服务CPU 100%处理过程 ),也有限制访问频率的需求。

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第二阶段06讲、Java内存模型以及CPU缓存不一致问题的引入.mp4 │ 高并发编程第二阶段07讲、CPU以及CPU缓存的结构,解决高速缓存一致性问题的两种方案介绍.mp4 │ 高并发编程第二阶段08讲、并发编程...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第二阶段06讲、Java内存模型以及CPU缓存不一致问题的引入.mp4 │ 高并发编程第二阶段07讲、CPU以及CPU缓存的结构,解决高速缓存一致性问题的两种方案介绍.mp4 │ 高并发编程第二阶段08讲、并发编程...

    手机 pdf 阅读器

    再次改进图片的阅读能力,小于100K的图片采用系统解码,采用高内存方式解码,>500K采用流式解码,对于ZIP中>256K的图片不再解码 修正阅读zip中大图片错误的bug 修正阅读中途出现排版错误的bug 背景图片加载的速度...

    新版Android开发教程.rar

    � 采用了对有限内存、电池和 CPU 优化过的虚拟机 Dalvik , Android 的运行速度比想象的要快很多。 � 运营商(中国移动等)的大力支持,产业链条的热捧。 � 良好的盈利模式( 3/7 开),产业链条的各方:运营商、...

    Redis面试题50道(含答案)_.pdf

    11、Redis 集群方案什么情况下会导致整个集群不可用? 12、MySQL 里有 2000w 数据,Redis 中只存 20w 的数据, 如何保证 Redis 中的数据都是热点数据? 13、Redis 有哪些适合的场景? 14、Redis 支持的 Java 客户端...

    易语言程序免安装版下载

    置列图片()有时功能不正常或导致随机错误。 13. 修改BUG:Sqlite3数据库支持库中的“Sqlite记录集.绑定参数()”命令不支持汉字/UTF-8。 14. 修改BUG:VCL相关支持库部分组件在修改个别属性或调用个别方法后不可见...

    煤矿设备状态监测系统设计-论文

    针对煤矿井下设备群同时作业时设备监测数据高并发导致的低传输效率问题,提出了一种煤矿设备状态监测系统设计方案。该系统通过数据集成网关有效消除传感器网络的异构性:在数据集成网关中对不同传感器进行注册,利用...

Global site tag (gtag.js) - Google Analytics