【发布时间】:2022-08-09 18:25:04
【问题描述】:
我不是 Java 开发人员,而是系统管理员,所以请原谅我的任何毫无意义的陈述或问题。
我怀疑在 Hibernate 中没有正确设置 C3P0 连接池,导致通过各种 Java 应用程序产生大量 Oracle DB 连接 (oracle<instanceID> (LOCAL-NO))。其中一些连接会保持 30 天(可能是陈旧的),直到它们被自动关闭或丢弃。这些连接进入“睡眠(S)”状态,进程堆栈在“sk_wait_data”阶段显示它们。他们中的大多数似乎确实在尝试寻找数据并返回“sk_wait_data”。切换每隔几秒钟发生一次。该开关使进程进入 CPU 运行队列,从而导致系统负载值增加。我相信这是一个非常关键的系统资源问题。
根据 JMC,最小池大小为 1,最大值取决于应用程序的类型。我怀疑min=1 完全错误,应该根据应用程序流量的可持续性和一些可扩展性缓冲区正确设置最大值。在 JMC 中,C3P0 池的使用似乎不稳定且效率低下。
所以连接状态的切换是不好的,需要修复。除了向上面的专家寻求 cmets,我还有一个关于数据库连接的问题:
JDBC 连接会像上面那样来回移动“sk_wait_data”还是错误?
我认为最小大小的池连接将始终连接到数据库,但不知道它们的套接字连接状态是什么?
同样在具有 2 个 Java 应用程序的 VM 上,它们似乎创建了 10 个池。也不确定这是否正确。
请指教。
-
嗯...没有人必须处理这些问题?有趣的..
标签: hibernate jdbc c3p0 oracle18c