项目使用了谷歌翻译API,一日,运维监测到生产环境部署的服务线程数持续增长,于是对生产环境线程进行排查
一、首先通过查看系统线程树查看线程数最多的进程
服务器上执行命令:pstree -p > threadNum.txt
通过线程树文件,定位到进程下线程数最多的pid为15131
二、统计该进程下所有线程数
服务器执行命令:ps -Tp 15131 | wc -l
三、查看并打印该进程的堆栈信息
服务器执行命令:jstack -l 15131 > jstack.log
查看堆栈信息文件发现前缀为Gax的线程数已达到了1880
四、通过进程前缀与相关文件信息定位到项目内相关报错信息为谷歌翻译的相关报错
五、于是调用了相关接口发现每调用一次,服务线程数便会增加1个。于是重新仔细查看了谷歌翻译API,找到了相关说明描述
六、大概确定原因为现有代码逻辑每次请求会创建一个client,也就创建了一个线程。于是根据文档说明,重构了代码。重新部署后观察问题解决。