Java系统记一次排查生产环境邮件突然就发不出来的问题

背景
邮件使用的Ofiice365
工单系统,会频繁的发送邮件。
有用户反馈说没有收到邮件,查询了邮件的发送记录,发现从某一天开始,邮件就没有开始发送了。

进入服务器,查看当前的线程状况
[root@prod ~]# jps   // 或者是ps -ef |grep xxx ,找到进程号
17868 Jps
10158 jar
[root@esiteappprd1 ~]# jstack 10158 > info.log // 把信息输出到log里

查看输出的日志

在这里插入图片描述
发现好多线程都在RUNNABLE状态,但是卡在了MailUtils.sendSimpleEmail(MailUtils.java:61)方法
打开代码瞅一瞅
发现

  1. 卡在了send方法
  2. 用了一个系统默认的异步线程池
    在这里插入图片描述
  • 使用的Ofiice365邮箱,会有一些限流的策略,当邮件发送的太多会卡住了,并且不会报错,线程也没被杀死就这么卡在这里。
  • 用的默认的线程池,只有8个核心线程,当8个线程都被卡住的时候,邮件再也发送不出去了。
解决过程
  1. 立马重启
  2. 增加邮件发送配置,配置超时时间
spring.mail.properties.mail.smtp.writetimeout=10000
spring.mail.properties.mail.smtp.timeout=10000
spring.mail.properties.mail.smtp.connectiontimeout=10000
  1. 修改线程池,改成自定义的线程池,不要使用系统默认的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值