当前位置: 代码迷 >> J2SE >> 为什么老是报 double free or corruption (fasttop): 0x0000000000abf110异常呢
  详细解决方案

为什么老是报 double free or corruption (fasttop): 0x0000000000abf110异常呢

热度:284   发布时间:2016-04-23 20:01:14.0
为什么老是报 double free or corruption (fasttop): 0x0000000000abf110错误呢?
我用pdf2swf实现从pdf文件转换成swf,怎么老报错?错误信息如下:
*** glibc detected *** /root/axj/swftools/bin/pdf2swf: double free or corruption (fasttop): 0x0000000000abf110 ***
*** glibc detected *** /root/axj/swftools/bin/pdf2swf: double free or corruption (fasttop): 0x0000000001981110 ***
*** glibc detected *** /root/axj/swftools/bin/pdf2swf: double free or corruption (fasttop): 0x00000000020fd110 ***
*** glibc detected *** /root/axj/swftools/bin/pdf2swf: double free or corruption (fasttop): 0x0000000002830650 ***
*** glibc detected *** /root/axj/swftools/bin/pdf2swf: double free or corruption (fasttop): 0x0000000002720650 ***
======= Backtrace: =========
/lib64/libc.so.6[0x32c4a75e66]
/root/axj/swftools/bin/pdf2swf[0x454858]
/root/axj/swftools/bin/pdf2swf[0x4d7087]
/root/axj/swftools/bin/pdf2swf[0x4bda39]
/root/axj/swftools/bin/pdf2swf[0x4864dd]
/root/axj/swftools/bin/pdf2swf[0x483a02]
/root/axj/swftools/bin/pdf2swf[0x483b36]
/root/axj/swftools/bin/pdf2swf[0x483ea9]
/root/axj/swftools/bin/pdf2swf[0x478c51]
/root/axj/swftools/bin/pdf2swf[0x478e07]
/root/axj/swftools/bin/pdf2swf[0x456c2c]
/root/axj/swftools/bin/pdf2swf[0x452e18]
/root/axj/swftools/bin/pdf2swf[0x40c41b]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x32c4a1ed5d]
/root/axj/swftools/bin/pdf2swf[0x40a919]
======= Memory map: ========
00400000-00660000 r-xp 00000000 08:02 20841575                           /root/axj/swftools/bin/pdf2swf
00860000-008c0000 rw-p 00260000 08:02 20841575                           /root/axj/swftools/bin/pdf2swf
008c0000-008c6000 rw-p 00000000 00:00 0 
00aa4000-00c62000 rw-p 00000000 00:00 0                                  [heap]
32c4600000-32c4620000 r-xp 00000000 08:02 14417976                       /lib64/ld-2.12.so
32c481f000-32c4820000 r--p 0001f000 08:02 14417976                       /lib64/ld-2.12.so
32c4820000-32c4821000 rw-p 00020000 08:02 14417976                       /lib64/ld-2.12.so
32c4821000-32c4822000 rw-p 00000000 00:00 0 
32c4a00000-32c4b8a000 r-xp 00000000 08:02 14418332                       /lib64/libc-2.12.so
32c4b8a000-32c4d8a000 ---p 0018a000 08:02 14418332                       /lib64/libc-2.12.so
32c4d8a000-32c4d8e000 r--p 0018a000 08:02 14418332                       /lib64/libc-2.12.so
32c4d8e000-32c4d8f000 rw-p 0018e000 08:02 14418332                       /lib64/libc-2.12.so
32c4d8f000-32c4d94000 rw-p 00000000 00:00 0 
32c5600000-32c5683000 r-xp 00000000 08:02 14418381                       /lib64/libm-2.12.so
32c5683000-32c5882000 ---p 00083000 08:02 14418381                       /lib64/libm-2.12.so
32c5882000-32c5883000 r--p 00082000 08:02 14418381                       /lib64/libm-2.12.so
32c5883000-32c5884000 rw-p 00083000 08:02 14418381                       /lib64/libm-2.12.so
32c5e00000-32c5e15000 r-xp 00000000 08:02 14418382                       /lib64/libz.so.1.2.3
32c5e15000-32c6014000 ---p 00015000 08:02 14418382                       /lib64/libz.so.1.2.3
32c6014000-32c6015000 r--p 00014000 08:02 14418382                       /lib64/libz.so.1.2.3
32c6015000-32c6016000 rw-p 00015000 08:02 14418382                       /lib64/libz.so.1.2.3
32c8a00000-32c8a98000 r-xp 00000000 08:02 6041711                        /usr/lib64/libfreetype.so.6.3.22
32c8a98000-32c8c97000 ---p 00098000 08:02 6041711                        /usr/lib64/libfreetype.so.6.3.22
32c8c97000-32c8c9d000 rw-p 00097000 08:02 6041711                        /usr/lib64/libfreetype.so.6.3.22
32cb600000-32cb616000 r-xp 00000000 08:02 14418379                       /lib64/libgcc_s-4.4.7-20120601.so.1
32cb616000-32cb815000 ---p 00016000 08:02 14418379                       /lib64/libgcc_s-4.4.7-20120601.so.1
32cb815000-32cb816000 rw-p 00015000 08:02 14418379                       /lib64/libgcc_s-4.4.7-20120601.so.1

我的代码如下:
package jmw.audit.monitor;

import java.io.File;
import java.sql.Timestamp;
import java.util.List;
import java.util.Map;

import jmw.audit.monitor.utils.DBHelper;
import jmw.audit.monitor.utils.DateTimeUtils;
import jmw.audit.monitor.utils.LogHelper;
import jmw.audit.monitor.utils.Sqls;
import jmw.convert.AesCBC;
import jmw.convert.Doc2PdfUtil;
import jmw.convert.Pdf2SwfUtil;

public class ConvertThread extends Thread{
private String siteKey = "";
private String officeHome;
private String pdf2SwfPath;
private String socketPort;

private Integer groupSize = 50;
public void setGroupSize(Integer groupSize) {
this.groupSize = groupSize;
}
private Integer loopSeconds = 10;
public void setLoopSeconds(Integer loopSeconds) {
this.loopSeconds = loopSeconds;
}

public String getOfficeHome() {
return officeHome;
}

public void setOfficeHome(String officeHome) {
this.officeHome = officeHome;
}

public String getPdf2SwfPath() {
return pdf2SwfPath;
}

public void setPdf2SwfPath(String pdf2SwfPath) {
this.pdf2SwfPath = pdf2SwfPath;
}

public String getSocketPort() {
return socketPort;
}

public void setSocketPort(String socketPort) {
this.socketPort = socketPort;
}

public final void setUrl(String siteKey) {
this.siteKey = siteKey;
}

@Override
public void run(){
try
{
final DBHelper dbHelper = new DBHelper(siteKey);
while(!JMWMonitor.stop){
final Timestamp currentTime = DateTimeUtils.getCurrentDateTime();

//2.处理转换
final List<Map<String,Object>> convertList = dbHelper.query(Sqls.GetAllNeedConvertFile);
if(convertList==null||convertList.size()==0)
{
//sleep(loopSeconds*1000);
sleep(loopSeconds*1000);
continue;
}

String strConvertIds = "";
for(int k = 0; k < convertList.size(); k++){
Map<String,Object> convertItemTemp = convertList.get(k);
strConvertIds = strConvertIds + convertItemTemp.get("Id") + ",";
}

strConvertIds = strConvertIds.substring(0,strConvertIds.length()-1);

  dbHelper.execute(Sqls.BatchUpdateFileProcessStatus.replace("??", strConvertIds), 1);

//对每个分组启用一线程进行监控
for(int k = 0; k < convertList.size(); k++){
final Map<String,Object> convertItem = convertList.get(k);
ParameterizedThread<Map<String,Object>> th = new ParameterizedThread<Map<String,Object>>(convertItem) {
public void run(){
try
{
DBHelper _helper=new DBHelper(siteKey);

//下载文件
String strFileType =  (String)convertItem.get("FileType");
String strDestFilePath =  new AesCBC().Decrypt((String)convertItem.get("DestFilePath"));

//转换在知识库下的swf文件路径
String strDestSwfFilePath = strDestFilePath.replace("." + strFileType , ".swf");

  //如果下载成功则将状态该为1
if(docToSwf(strFileType,strDestFilePath,strDestSwfFilePath)){
dbHelper.execute(Sqls.UpdateFileStatus, 2,0,convertItem.get("Id"));
}else{
dbHelper.execute(Sqls.UpdateFileStatus, 1,0,convertItem.get("Id"));
}
}
catch(Exception ex)
{
ex.printStackTrace();
LogHelper.Error(LogHelper.getExceptionTrace(ex));

try{
dbHelper.execute(Sqls.UpdateFileStatus, 1,0,convertItem.get("Id"));
}catch(Exception e){
LogHelper.Error("更新记录" + convertItem.get("Id")+ "从状态1到2出错,错误信息为:" + e.getMessage());
}
}
}
};
th.start();
}

//dbHelper.execute(Sqls.BatchUpdateFileProcessStatus.replace("??", strConvertIds), 1);
//监控间隔时间
sleep(1000 * loopSeconds);
}
}catch(Exception e)
{
e.printStackTrace();
LogHelper.Error(LogHelper.getExceptionTrace(e));
}
}

//doc或pdf文件转换成swf文件
private synchronized boolean docToSwf(String strFileType,String strDestFilePath,String strDestSwfFilePath){
boolean blnReturn = true;

File swfFile = new File(strDestSwfFilePath);

//说明已经存在,重名的可能性几乎没有,所以不需要转换
if(swfFile.exists()){
return blnReturn;
}

File pdfFile = null;

if("doc".equals(strFileType) || "docx".equals(strFileType)){
pdfFile = new File(strDestFilePath.replace("."+strFileType,".pdf"));
}else if("pdf".endsWith(strFileType)){
pdfFile = new File(strDestFilePath);
}

//需要转换的doc文件
if("doc".equals(strFileType) || "docx".equals(strFileType)){
File docFile = new File(strDestFilePath);

if(!pdfFile.exists()) {
Doc2PdfUtil doc2PdfUtil = new Doc2PdfUtil();
doc2PdfUtil.convert2PDF(officeHome,socketPort,docFile, pdfFile);
}
}

//转换成后还需要再转换成swf文件
if(pdfFile.exists()){
//3.转换为swf文件
//如果swfFile目录不存在
Pdf2SwfUtil pdf2SwfUtil = new Pdf2SwfUtil();
boolean bl = pdf2SwfUtil.convert2SWF(pdf2SwfPath,pdfFile, swfFile);

//如果转换失败
if(!bl){
blnReturn = false;
}else{
System.out.println("convert2SWF success .. pdfFile =" + pdfFile.getName());
}
}else{
blnReturn = false;
}
return blnReturn;
}
}


------解决思路----------------------
这个异常貌似是底层的API爆出来的,感觉像是内存问题,你调整Xmx参数试试
  相关解决方案