防病毒软件拖慢Tomcat嵌入式Java应用的解决方案咨询
刚好之前帮客户处理过几乎一模一样的问题,给你几个亲测有效的方案:
一、调整Tomcat配置减少文件扫描触发
Tomcat自身的一些默认机制会频繁访问文件,这会让杀毒软件持续盯上这些文件,我们可以通过配置来降低这种频率:
关闭热部署和资源锁定检查
Tomcat默认会定期扫描WEB-INF/lib和WEB-INF/classes目录的文件变化用于热部署,同时会启用资源锁定防止文件被占用。这两个操作都会频繁读写文件,很容易触发杀毒扫描。你可以在Tomcat的conf/context.xml里修改Context节点:<Context antiResourceLocking="false" reloadable="false"> <!-- 你的其他Context配置 --> </Context>把
reloadable设为false会彻底关闭热扫描,antiResourceLocking设为false会减少Tomcat对文件的锁定操作,两者结合能大幅降低文件访问频率。将临时文件移至内存目录
Tomcat运行时会在CATALINA_BASE/temp生成大量临时文件,杀毒软件经常会扫描这个目录。你可以把临时目录指向内存文件系统,比如Linux的/dev/shm(内存挂载目录),Windows可以用RAMDisk工具创建内存盘。修改方式如下:- Linux:在
bin/catalina.sh开头添加
记得先创建export CATALINA_TMPDIR=/dev/shm/tomcat_temp/dev/shm/tomcat_temp目录并赋予Tomcat进程读写权限。 - Windows:在
bin/catalina.bat开头添加
这里的set CATALINA_TMPDIR=R:\tomcat_tempR:是你创建的RAMDisk盘符。
内存里的文件不会被杀毒软件扫描,同时读写速度还会更快,一举两得。
- Linux:在
二、寻找服务器默认免扫描的部署位置
如果没法改Tomcat配置,试试把应用部署到杀毒软件默认不深度扫描的目录:
系统临时目录
多数杀毒软件默认不会实时深度扫描系统临时目录,比如Windows的C:\Windows\Temp,Linux的/tmp。你可以把Tomcat或应用包部署到这里,但要注意:系统重启后临时目录的文件可能会被自动清理,所以需要配合自动部署脚本或者定期备份。内存挂载目录
和上面临时目录的思路一样,直接把整个Tomcat或应用部署到内存目录(如Linux的/dev/shm),完全避开磁盘扫描。不过要注意服务器的可用内存,确保能装下整个应用和Tomcat的运行文件。企业级服务器的专用应用目录
部分Linux发行版的/opt目录,或者Windows的Program Files (x86),有些杀毒软件对这些目录下的合法应用会放宽扫描策略。你可以试试把Tomcat安装到这里,再部署应用。
三、其他优化小技巧
打包成单文件可执行JAR
如果你的应用是嵌入Tomcat的,可以把整个应用(包括Tomcat依赖)打包成一个单可执行JAR文件。杀毒软件扫描单个大文件的频率远低于扫描数百个小class文件,能有效降低扫描对性能的影响。减少应用的磁盘IO操作
检查应用里的日志、临时缓存、文件生成逻辑,尽量把这些操作移到内存中(比如用内存数据库、内存缓存),减少磁盘读写的频率,也就减少了杀毒软件的扫描触发机会。
内容的提问来源于stack exchange,提问作者Stefan

