java web bug 记录
1、文件下载 bug
- 项目场景:
最近做一个项目需要将文件上传到HDFS,文件大小在1-2G左右 - 问题描述:
在上传的过程中内存爆满导致 out of memory 异常,通过VisualVm监视可以看到一段内存爆炸增长的阶段。
- 原因分析:
service 的代码是这样的
@Override
public void downloadFile(Integer fileId, HttpServletResponse response){
//流速集信息
AccessFile accessFile = fileMapper.selectByPrimaryKey(fileId);
String[] split = accessFile.getFileUri().split(FileUtil.FILE_SEPARATOR);
FileSystem fs = null;
FSDataInputStream is = null;
ServletOutputStream os = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try{
//hdfs信息
Configuration configuration = new Configuration();
fs = FileSystem.get(new URI(hdpConfig.getUri()),configuration,hdpConfig.getUser());
is = fs.open(new Path(accessFile.getFileUri()),1024);
//响应头设置
response.setHeader("content-disposition","attachment;filename="+ URLEncoder.encode(split[split.length - 1],"UTF-8"));