Weblogic Struts 发布war包生成大量内容一致的临时文件(jar_cache*.tmp)

分析

weblogic 发布war包时, weblogic将war中的classes中的文件打包成了_wl_cls_gen.jar, 导致struts(我这的2.5.17)在读取文件时需要从这个jar里进行读取, 且每次读取一个xml就关闭了输入流; 从jar中读取的过程存在解压的步骤, 在tmp文件夹中写入临时文件, 进而出现大量相同的文件, 且文件的MD5和_wl_cls_gen.jar的一致, 这也是我做出以上描述的依据.

处理

2种方法

  1. 升级struts 2.5.17 至 2.5.18
  2. 修改发布方式, 将war包解压后发布
    选中解压后的文件夹
    在这里插入图片描述
    后面配置中的"源可访问性"选最后一项(这里选了之后好像上面那步没啥用, 因为文件是从这里加载了)
    在这里插入图片描述
    再次发布后就没有生成_wl_cls_gen.jar和大量的临时文件了
  • 扩大缓存,直接在内存中解压jar并提取文件, 目前没找到相应方法/配置 , 文件读取缓存大小,但是好像不能解决每次取xml就解压的问题,

关联词

weblogic, 大量临时文件, Struts, jar_cache, tmp, java.io.tmpdir

发现过程(闲谈)
  • 系统发布时间很长还卡, 启动还需要写入大量的临时文件
  • 看日志发现在自定义的监听器都执行完毕后卡好一会, 临时文件就是在这时写入,是大量的jar_cache*.tmp文件, 大约几兆, 但是数量很多导致占用大量java.io.tmpdir指定的空间, 文件大小一致, MD5也一致, tomcat中就没有这个问题
  • 分析了tmp文件, 发现是项目中文件, 大致是class和各种properties及xml文件, 默认发现jsp/html等(伏笔)
  • 因为系统发布时间较长, 打算先删掉一些启动项缩短时间 (因为我也不清楚什么原因, 考虑到需要测试和发布很多次观察现象做总结, 能快点就快点, 删context.xml和DTO怕起不来, 删了Action.xml和字典加载), 发现临时文件变少了
  • 字典是写在缓存里的, 而且内容也对不上, 怀疑是一个action对应一个临时文件,测试后发现不对
  • 怀疑是一个package对应一个临时文件, 测试后也不对
  • 怀疑是一个action.xml对应一个临时文件, 测试现象符合预期
  • 日志打的info, debug级别的日志太多, 没敢开, 但是又需要知道是哪里写入的
  • 故意在xml中写了个语法错误,通过异常栈看到了调用过程,(windows启的weblogic,没用过jstack), 感觉XmlConfigurationProvider.loadConfigurationFiles这方法值得怀疑
  • 下载Struts的源码看一下, 发现文件流都是正常关闭的
  • 故意include一个不存在的文件, 没发现报错, 上eclipse调试发现异常被吞掉了, 只输出了一条debug, 这怎么也应该要配warn吧
  • 尝试eclipse连接weblogic调试, 报了个拒绝连接, 就放弃了
  • 查看语法报错的提示发现文件路径是: zip:部分路径/_wl_cls_gen.jar!/xml路径
  • 确认了weblogic的发布目录下的lib文件夹有这个文件_wl_cls_gen.jar且classes文件夹中无内容
  • 比对_wl_cls_gen.jar和临时文件的MD5, 结果一致
  • 搜到解决方法纯属巧合, 想着不让weblogic打包classes生成jar, 就先搜发布优化, 没找到合适的, 看了下welogic文档, 没找到中文的, 放弃
  • 最后看到了 “weblogic 单独更新class文件"里提到了使用展开目录部署, 搜索后找到了"weblogic的三种发布方式”, 用其中的按目录发布暂时解决了这个问题
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值