• spring Boot 上传文件,10天后,不能上传的bug


    1. 起因 

               公司研发人员 部署服务在阿里云 ecs 服务器; 上传文件过1周左右文件自动丢失;

    2. 排查思路:

          (1).查询tomcat 启动日志出现如下信息:

                java.io.IOException: The temporary upload location [/tmp/tomcat.1593253653386650830.8220/work/Tomcat/localhost/ROOT] is not valid

         (2).这个目录在Linux系统中默认建在/tmp目录下, 10天就会被清除, 引发上述异常.  

       (3).man systemd-tmpfiles 

        

      图片.png

       

    (3).由此可确定服务为凶手;就是说/tmp 目录下除了下面排除的文件,都给删了。擦~

    1.     

          系统环境:

                           Centos-7.2 

               内核版本:  

                           2.6.32-696.3.2.el6.x86_64

               容器:

                             Tomcat 8.5.15.tar.gz    

              

    2.tomcat 服务层解决办法;

    JVM_OPTIONS="-Xrs -Xms256m -Xmx512m -Djava.io.tmpdir=/data/app/upload"   ####tomcat bin catalina.sh 文件修改##
     

    3.程序框架解决办法:

    框架配置文件新增: application.properties     ####sprint-boot 框架配置文件#######

    server.tomcat.basedir=/data/app/upload
     

    4.系统解决方案;

    解决方案在 /usr/lib/tmpfiles.d/ 新建文件把指定目录添加上并规定不让被清除
    root@~:# vi /usr/lib/tmpfiles.d/tomcat.conf
    d /tmp/tomcat* 0755 root root -            
    d /tmp/upload  0755 root root -             ##tomcat 程序上传目录文件

    OK,重启 systemctl restart systemd-tmpfiles-clean  服务;

    ----------------------------------------------------------------------------------------

    线上的系统中不能上传文件了,出现如下错误:

    org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request;nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1337767218595042057.80/work/Tomcat/localhost/ROOT] is not valid org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:112) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.
    1
    原因:
    在linux系统中,springboot应用服务再启动(java -jar 命令启动服务)的时候,会在操作系统的/tmp目录下生成一个tomcat*的文件目录,上传的文件先要转换成临时文件保存在这个文件夹下面。由于临时/tmp目录下的文件,在长时间(10天)没有使用的情况下,就会被系统机制自动删除掉。所以如果系统长时间无人问津的话,就可能导致上面这个问题。

    解决办法:
    在 yml配置文件 中添加:

    server.tomcat.basedir: /data/apps/temp
    1
    手动的将临时文件夹设置为自定义的文件夹,就不会被Linux删除了。

    ps:在windows系统中可以生效,系统会自动生成/data/apps/temp这一路径,但是在Linux系统中不会生成/data/apps/temp路径。tell me why?…

  • 相关阅读:
    解决验证码问题
    python中的偏函数partial
    Python 数据表orm设计
    参悟yield 和yield from (加精)
    numpy基础
    JS中的面向对象
    pandas使用教程
    一次tornado建站项目分享
    django 一对一, 一对多,多对多的领悟
    三维向量类
  • 原文地址:https://www.cnblogs.com/maohuidong/p/9957480.html
Copyright © 2020-2023  润新知