背景
运行在操作系统的一个 agent ,配置 systemd 开机启动,
ps -ef | grep '进程名' | wc -l
发现系统内启动了十几个进程,
ps -eLf | grep '进程名' | wc -l
发现有 70 多个线程。
分析
需要分析进程从哪里来的,看了
1、分析 systemd 的 service 文件,如下图,正常的 Service 配置:
2、分析 java 启动程序,java 启动命令如下;
start
stop
3、分析启动 main 方法;
发现启动过程中,有同步创建 HttpClient 对象,向外部发送请求。
结论
1、systemd 和 start.sh 的启动过程都是同步调用,当 HttpClient 无法访问外部系统时,启动发生阻塞;
2、HttpClient 没有限制线程;