log4j2自动删除日志文件
线上的项目每天产生大量的日志文件,而磁盘大小又是有限的,不可能一直把日志文件保留下来,但是每次磁盘报警上去删日志文件也挺麻烦的,log4j2中可以配置日志文件的删除策略。
在DefaultRolloverStrategy中配置Delete,当触发了滚动时,就会执行DefaultRolloverStrategy中配置的各个Action操作,而Delete标签就表示的DeleteAction
1 | <DefaultRolloverStrategy max="30"> |
线上的项目每天产生大量的日志文件,而磁盘大小又是有限的,不可能一直把日志文件保留下来,但是每次磁盘报警上去删日志文件也挺麻烦的,log4j2中可以配置日志文件的删除策略。
在DefaultRolloverStrategy中配置Delete,当触发了滚动时,就会执行DefaultRolloverStrategy中配置的各个Action操作,而Delete标签就表示的DeleteAction
1 | <DefaultRolloverStrategy max="30"> |
Appender在log4j2中有很多实现类,如ConsoleAppender(插件名称为Console)、FileAppender(插件名称为File)、RollingFileAppender(插件名称为RollingFile)等,在实际的项目中通常使用的都是RollingFileAppender,也就是日志文件滚动更新的Appender
1 | <RollingFile name="file" fileName="/data/log/app.log" |
其滚动依赖于TriggeringPolicy(触发策略)和RolloverStrategy(滚动更新策略)
TriggeringPolicy为触发策略,决定了何时触发日志文件的滚动。常见策略有CronTriggeringPolicy、OnStartupTriggeringPolicy、SizeBasedTriggeringPolicy、TimeBasedTriggeringPolicy、CompositeTriggeringPolicy
CronTriggeringPolicy是基于Cron表达式来进行触发的
1 | <!-- 根据cron来进行触发 --> |
代码
最近项目时不时地连接mysql数据库报错
1 | {pool-21-thread-1} SQL Error: 0, SQLState: 08S01 |
同样的阿里云数据库,其他的服务器连接都不会报错,而且看云数据库的监控,负载是没有问题的。说明大概率不是云数据库的问题。
而该项目比其他服务器里的项目不同的是,访问量比较高,猜测会不会是外网带宽问题,尝试将mysql连接改成内网,这样走内网,观察两天发现,虽然减少了,但还是存在。
猜想是不是tcp连接太多导致的,后发现/var/log/messages日志中报错nf_conntrack: table full, dropping packet
最近有个需求,视频上传之后在列表和详情页需要展示缩略图
首先引入jar包
1 | <dependency> |
代码如下
1 | public String getThumbnails(String videoFilePath){ |
top
命令查看cpu的 %idle还有多少,如果idle过少,表示CPU使用率较高,按P用CPU排序,查看CPU占用多的进程。之后可以通过该文章【 CPU飙升 】来查找问题 free -h
查看内存使用情况,如果剩余内存偏少,使用vmstat -n 1
查看 si、so列的情况,确认是否内存不够用了。如果内存不够用了,使用top
命令,按M用内存排序,查看内存占用多的进程netstat -tnop | wc -l
查看tcp连接数,如果连接数过高,按照PID统计tcp连接数量 netstat -tnp | awk '{print $7}' | sort | uniq -c | sort -m
,查看各个状态下的连接有多少个netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c
iostat -d 1
,查看kB_read/s kB_wrtn/s,如果磁盘读写频繁,找到大量写磁盘的进程,使用iotop
或者ls -l /proc/*/fd
或者pstack
或者strace
命令来查看