我创建了一个简单的Java守护程序。尽可能愚蠢-从数据库中获取一些信息并将其发送到Samba共享
外观:
while (true) {
do_some_database_job(connection_pool.getCnx())
do_some_preprocessing
Thread.sleep(schedule_interval);
}
但是,经过几次迭代,它就卡住了。
我用strace检查了JVM进程,最后一条记录是这样的:
futex(<a_hex_address>, FUTEX_WAIT, <jvm_pid+some_number>, NULL)
所以我怀疑这是一个僵局,但是为什么会这样呢?我只运行一个线程。
我正在使用dbcp2进行连接池和登录。
在Win7 / RHEL7,jdk1.8 / jdk10上进行了实验