jetty8上传文件报错排查Processing of multipart/form-data request failed./tmp xxxx (No such file or directory)

jetty8上传文件报错排查

问题:

服务器正常运行项目正在使用,突然用户上传文件报错,并且这种情况不是第一次了,所以下定决心排查问题,项目使用的容器是jetty8,脚本都是之前历史遗留的比较乱,这次一起看看

1.错误提示代码:

        

<html> <head> <meta http-equiv="Content-Type"
content="text/html; charset=ISO-8859-1"/> <title>Error
500 Server Error</title> </head> <body><h2>HTTP
ERROR 500</h2> <p>Problem accessing
/cgoem/api/files/upload. Reason: <pre>Server
Error</pre></p><h3>Caused by:</h3>
<pre>org.springframework.web.multipart.MultipartException:
Could not parse multipart servlet request; nested
exception is
org.apache.commons.fileupload.FileUploadBase$IOFileUploadE
Processing of multipart/form-data request failed.
/tmp/jetty-0.0.0.0-8086-test.war-test-
any-/upload_82a2b1c4_53f1_496c_a5be_14e918226973_00001
(No such file or directory) at
org.springframework.web.multipart.commons.CommonsMultipart
at
org.springframework.web.multipart.commons.CommonsMultipart
at
org.springframework.web.servlet.Dispatcher Servlet.checkMutipa
at
org.springframework.web.servlet.DispatcherServlet.doDispatch(D
at

2.错误原因排查:

        查看报错信息提示中含有(No such file or directory),意思是找不到文件或者文件夹,而提醒信息中确实含有一个明确的目录

/tmp/jetty-0.0.0.0-8086-test.war-test-any-/upload_82a2b1c4_53f1_496c_a5be_14e918226973_00001

        于是登录服务器之后手动在根目录的tmp文件夹下新建对应的文件夹,这个时候用户再次上传文件成功且并未报错

        初步判定就是这个文件夹的问题,那么这个文件夹是怎么来的,为什么jetty需要它,而为什么用户操作的时候又找不存在了

3.异常原因:

        jetty在运行时,会将war包解压到某一个文件夹中,具体解压的文件夹路径配置在,jetty.sh中(jetty9之后似乎可以配置work目录,但是项目用的jetty8,不支持该操作),而当不修改使用jetty的默认配置时,则是在根目录下的 /tmp文件夹中

        而服务器使用的CentOS,默认情况下会定时清理 tmp 文件夹,而该项目使用并不是很频繁,导致过一段时间 tmp 文件夹就会被清空,这个时候用户访问文件上传就会报错

4.解决方法:

        1.第一种:直接修改CentOS的清理逻辑

          /tmp目录的清理规则主要取决于/usr/lib/tmpfiles.d/tmp.conf文件的设定,在该配置文件中加入 下面的配置,就不会删除固定开头的临时文件      

x/tmp/tomcat.*  这里是tomcat
x/tmp/jetty.*   这里是jetty

        2.第二种:修改jetty启动脚本

        ①、首先修改 jetty.sh 将原先的目录配置改为tmp以外的目录,可以直接在jetty目录底下新建目录使用,这样的系统清理tmp文件夹就无所谓了

原先是使用根目录TMP文件夹:  TMPDIR=${TMPDIR:-/tmp}
修改为jetty下的目录:TMPDIR=${TMPDIR:-/home/jetty-8.1.17/temp}

        ②、修改jetty目录下的start.ini  ,新增一行命令用来启动的时候指定解压的文件夹

-Djava.io.tmpdir=/home/jetty-8.1.17/temp

        修改完成后重启jetty即可正常使用

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值