3.10. 配置线程池的概念


了解避免资源耗尽和拥塞的概念。

本节旨在了解如何为红帽构建的 Keycloak 配置线程池连接池的注意事项和最佳实践。对于应用此功能的配置,请访问 使用 Operator 为 HA 部署红帽构建的 Keycloak。

3.10.1. 概念

3.10.1.1. Quarkus executor 池

红帽构建的 Keycloak 请求以及阻塞探测由 executor 池处理。根据可用的 CPU 内核,它的默认最大值为 50 个或更多线程。线程根据需要创建,并在不再需要时结束,因此系统将自动扩展和缩减。红帽构建的 Keycloak 允许通过 http-pool-max-threads 配置选项配置最大线程池大小。

3.10.1.2. Load Shedding

默认情况下,红帽构建的 Keycloak 将无限地将所有传入的请求排队,即使请求处理停止也是如此。这将在 Pod 中使用额外的内存,可能会耗尽负载均衡器中的资源,请求最终会在客户端一侧超时,而无需了解请求是否已被处理。要限制红帽构建的 Keycloak 中排队请求数,请设置额外的 Quarkus 配置选项。

配置 http-max-queued-requests,以指定在超过此队列大小后有效的负载均衡的最大队列长度。假设红帽构建的 Keycloak Pod 进程每秒约 200 个请求,则队列为 1000 会导致最大等待时间为 5 秒。

当此设置处于活跃状态时,超过排队请求数的请求将返回 HTTP 503 错误。Red Hat build of Keycloak 会在日志中记录错误消息。

3.10.1.3. probes

Red Hat build of Keycloak 的存活度探测是非阻止的,以避免在高负载下重启 Pod。

在一些情况下,整个健康探测和就绪度探测可能会检查与数据库的连接,因此它们可能会在高负载下失败。因此,Pod 可能会在高负载下变为未就绪。

3.10.1.4. OS 资源

为了使 Java 创建线程,在 Linux 上运行时,它需要有文件句柄。因此,打开的文件数量(如 ulimit -n on Linux)需要为红帽构建的 Keycloak 提供头空间,以增加所需的线程数量。每个线程也会消耗内存,容器内存限值需要设置为允许此的值,或 Pod 将由 OpenShift 终止。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat