conf/logging.properties中的日志级别从INFO调整为WARN(或更高),减少不必要的调试信息输出。例如,禁用org.apache.catalina包下的DEBUG日志,降低日志文件大小和写入频率。server.xml中注释或删除AccessLogValve配置;若需保留,启用缓冲写入(buffered="true")并增大缓冲区大小(bufferSize="65536"),减少频繁的磁盘写入操作。logrotate工具管理Tomcat日志,设置每日切割(daily)、保留14天(rotate 14)、压缩旧日志(compress)及延迟压缩(delaycompress),避免单个日志文件过大占用磁盘空间和I/O资源。从Tomcat 8开始,可通过AsyncFileHandler实现异步日志记录,将日志写入操作放入单独的线程池,减少对主线程的阻塞。例如,在logging.properties中配置:
handlers = 1catalina.org.apache.juli.AsyncFileHandler
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.bufferSize = 8192
异步日志可显著降低日志写入对请求处理的延迟影响。
logs)挂载到内存文件系统tmpfs(需足够内存),避免磁盘I/O。例如:sudo mount -t tmpfs -o size=1g tmpfs /path/to/tomcat/logs
修改setenv.sh设置LOG_DIR环境变量,确保Tomcat启动时使用该目录。server.xml的Connector中设置compression="on"、compressionMinSize="2048"及compressableMimeType(如text/html,text/css,application/javascript),减少静态资源的传输大小,间接降低磁盘读取和网络I/O压力。Host配置中的autoDeploy="false"、unpackWARs="false",避免Tomcat频繁扫描和解压WAR文件,减少不必要的磁盘操作。默认情况下,Tomcat将会话数据存储在work目录的文件中,频繁的读写会导致磁盘I/O瓶颈。可通过以下方式优化:
context.xml中设置<Manager pathname="" />,将会话数据存储在内存中(适用于单机环境)。RedissonSessionManager),将会话数据存储在内存数据库中,彻底避免磁盘I/O。data=writeback),提升文件系统性能。iotop、vmstat或Prometheus+Grafana监控Tomcat进程的磁盘I/O使用率(目标<70%)、I/O等待时间(目标<20%),及时发现瓶颈。crontab)定期删除过期日志(如超过30天的日志),避免日志文件无限增长占用磁盘空间。