WebappClassLoaderBase | The web application [ROOT] appears to have started a thread named [HikariPo
linux(RHEL8)中使用root启动java程序(使用springboot 框架)时可以正常的访问,而当使用非root用户启动springboot 的java 程序时,遇到以下错误:
Identify and stop the process that's listening on port 443 or configure this application to listen on another port.
查看日志后,发现日志中有警告| WARN | main | WebappClassLoaderBase | The web application [ROOT] appears to have started a thread named [HikariPool-1 housekeeper] but has failed to stop it. This is very likely to create a memory leak.,详细的如下:
2022-05-04 13:01:29.164 | INFO | main | ThreadPoolConfig | Configure task exectuor with corePoolSize = 10, maxPoolsize = 20, queueCapacity = 25
2022-05-04 13:01:29.168 | INFO | main | ThreadPoolTaskExecutor | Initializing ExecutorService 'taskExecutor'
2022-05-04 13:01:29.173 | INFO | main | ThreadPoolConfig | Configure task scheduler with poolSize = 4
2022-05-04 13:01:29.175 | INFO | main | ThreadPoolTaskScheduler | Initializing ExecutorService 'taskScheduler'
2022-05-04 13:01:30.447 | INFO | main | WelcomePageHandlerMapping | Adding welcome page template: index
2022-05-04 13:01:31.313 | INFO | main | Http11NioProtocol | Starting ProtocolHandler ["https-jsse-nio-443"]
2022-05-04 13:01:31.348 | INFO | main | Http11NioProtocol | Pausing ProtocolHandler ["https-jsse-nio-443"]
2022-05-04 13:01:31.349 | INFO | main | StandardService | Stopping service [Tomcat]
2022-05-04 13:01:31.355 | WARN | main | WebappClassLoaderBase | The web application [ROOT] appears to have started a thread named [HikariPool-1 housekeeper] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
java.base@17.0.3/jdk.internal.misc.Unsafe.park(Native Method)
java.base@17.0.3/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252)
java.base@17.0.3/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1672)
java.base@17.0.3/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182)
java.base@17.0.3/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899)
java.base@17.0.3/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062)
java.base@17.0.3/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122)
java.base@17.0.3/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
java.base@17.0.3/java.lang.Thread.run(Thread.java:833)
错误原因:
这个java 程序直接使用了443 和 80 端口,没用通过使用像nginx 这样的网关代理到java程序。而一般用户没有权限直接使用这两个端口,就会出现上面的错误。
解决方案:
首先找到java的安装目录:
sudo update-alternatives --config java
如下图示我的java程序安装路径为/usr/lib/jvm/java-17-openjdk-17.0.3.0.6-2.el8_5.x86_64/bin/java

然后,使用setcap配置java让其能够有权限绑定网络端口:
sudo setcap cap_net_bind_service=+ep /usr/lib/jvm/java-17-openjdk-17.0.3.0.6-2.el8_5.x86_64/bin/java
测试下,确保java工作:
java -version
我们发现报错:
java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

修复这个问题的方式是:
第一步,找到库文件libjli.so的路径,并将器链接到/usr/lib/
sudo ln -s /usr/lib/jvm/java-17-openjdk-17.0.3.0.6-2.el8_5.x86_64/lib/libjli.so /usr/lib/
第二步,执行动态链接库管理命令:
sudo ldconfig
使用java -version测试,成功解决。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)