这个页面帮助你对应用性能进行提升需要进行的一些操作。这个页面不是为你对 Confluence 出现问题后进行问题修复的指南。如果你的 Confluence 崩溃的话,请查看Troubleshooting Confluence hanging or crashing 页面中的内容来获得帮助。
与其他应用服务器一样,Confluence 可能需要对系统进行一些调整才能让 Confluence 能够承受更大的数据访问量。我们尽我们最大的努力能够让 Confluence 满足各种环境下的访问需求。但是没有一个配置能够满足所有用户的需求和用户的使用环境。
如果你在部署 Confluence 的时候遇到了性能方面的问题,并且希望获得我们的帮助,你应该参考页面 Requesting Performance Support 中的内容。
对你使用的工具采用最新版本
针对你的应用程序,使用最新版的安装和 Java 运行环境。新的版本通常有更好的性能优化。
因没有足够内存避免 swapping
总是关注你服务器的交换(swapping)活动。当没有足够的 RAM 可用的时候,你的服务器可能开始将 Confluence 存储在交换器的一些内容转存到硬盘上。这个过程将会显著降低垃圾回收的速度而对 Confluence 的性能产生影响。在集群的环境下,交换器问题将会导致 Cluster Panic due to Performance Problems 问题。这是因为交换器导致 JVM 在进行 Garbage Collection 的时候暂停,这个将会导致内部节点的通信中断,而这个通信又是节点进行同步所需要的。
不要让其他系统使用相同结构
下面的配置可能看起来是非常诱人的:你只有一台服务器,这个服务器具有很高的性能,因此你将数据库服务器,应用服务器和其他你的一些重要服务都同时部署在这个服务器上。如果这个系统能够完美的运行,你可能还感觉不到什么问题。问题是,当你可能忽略了一些问题,同时其他应用的 bug 将会对你部署的应用产生影响。例如,如果你的 Confluence 应用每天都在中午的时候变得缓慢,你有可能是其他的服务在利用共享的数据库在创建报表?要么你需要保证部署在同一架构上的应用不会互相影响,要不你考虑将不同应用部署到不同的架构上,这样你也更好的进行控制。
选择数据库
Confluence 安装中提供的嵌入 H2 数据库仅仅是用来评估使用的,这个数据库不适合使用生产环境中的 Confluence。当你对 Confluence 评估完成后,你必须切换到一个支持的外部数据库中。我们推荐你使用你熟悉的数据库,因为你能够更好的对数据库进行维护,这个可能相对你不熟悉的数据库来说,能更好的让你对数据库的性能进行优化。
数据库连接池
如果 Confluence 的负载比较高,你可能需要增加你数据库的连接数。
- 如果你使用的是 JNDI 数据源,你需要在你的应用服务器配置文件中进行修改。
- 如果你配置 Confluence 直接连接数据库,你需要手动变焦 hibernate.c3p0.max_size 属性,这个属性在 confluence.cfg.xml 文件中定义,这个文件在你的 confluence.home 目录中。当你修改了 Confluence 的这个配置文件后,你需要对 Confluence 进行重启。
希望确定是否需要对i的数据库连接池进行修改,针对不同时间段(在高峰时间段),对 thread dumps 进行查看来了解有多少线程正在连接数据库。
数据库基本情况
如果 Confluence 正在运行缓慢,那么很有可能是其中一个数据库遇到了瓶颈。
最先你应该检查的是 数据库延迟(Database Latency) 字段,这个字段的内容是在管理员控制台中定义的。
数据库延迟是通过向数据库发送一个不重要的查询来查询数据库的表来进行计算的,这个查询通常只有一个表一个字段(例如,select * from CLUSTERSAFETY)。很明显的,这个查询应该非常快速的放回结果,通常应该是在 1 到 2 毫秒的样子。如果这个查询的返回时间到了 3 到 5 毫秒的话则表明数据库中遇到了一些问题。如果这个返回超过了 10 毫秒,你需要对数据库进行调整来提高数据库的性能。几个毫秒的性能开支可能看起来没有什么问题,但是考虑到 Confluence 在每一个查询的时候可能需要对多个数据库表进行查询,同时这个查询也会复杂得多。高延迟可能是因为某些原因导致的(网络速度慢,数据库慢,连接池的连接等),因此需要你对这些问题进行调查研究。请一直对数据库进行调整,指导延长时间控制在 2 毫秒以下。
显而易见的,数据库延迟只是你需要考虑的第一件事情。你依然有可能获得 0 延迟,但是你还是有很多数据库的性能问题,例如你的的数据库表没有建立索引。所以不要让延迟率过度干扰你。
数据库状态和查询分析
现代的数据库会基于你对数据库运行的查询历史来对查询进行优化。使用 SQL EXPLAIN 语句将会告诉你数据库查询的优化情况。如果数据库查询命中率明显的不同,那么你需要考虑对数据库运行状态收集和优化。针对你数据库的版本不同,优化的版本和方向也会不同。在大多数的情况下,你可以在 Confluence 运行的时候对数据库查询的运行状态进行收集。但是这个查询也会增加数据库的负载,因此我们还是建议你最好不要在 Confluence 正常运行的时候运行,你可以考虑在周末运行。
Confluence 和 Apache 的缓存性能
为了减少数据库的载入数据和对很多操作提高效率,Confluence 将会保持自己的数据缓存。增加 Confluence 数据缓存的大小将会提高 Confluence 的速度(如果缓存太小的话),或者降低换成(如果缓存太大的话)。
请查看我们有关 Cache Performance Tuning 的文档来获得 Confluence 缓存的更多信息。
防病毒软件
防病毒软件也会显著的降低 Confluence 的性能。防病毒软件终止进程对磁盘的访问是非常有害的,同时还可能会导致 Confluence 的错误。你应该配置你的防病毒软件忽略 Confluence 的 home 目录,这个目录存储的是 Confluence 索引和其他任何数据库相关的目录。
启用 HTTP 压缩
如果带宽响应是你 Confluence 安装的瓶颈的话,你应该考虑启用 启用 HTTP 压缩。这个可能能够让你能够降低你对带宽的消耗。
请注意,针对 Confluence 2.8 及其早期版本,启用 HTTP 压缩会导致一些 known issues with HTTP compression ,这些问题将会增加内存的消耗。
性能测试
针对 demo 系统,你应该尝试所有的可能的性能测试。如果可能的话,你应该针对你的模拟器环境运行性能测试。
Access 访问日志
你可以通过 enabling Confluence's built-in access logging 来找到那些页面访问环境和那些用户正在访问它们。
内建探测器
你可以通过使用 Confluence 的内建探测器,根据 Troubleshooting Slow Performance Using Page Request Profiling 页面中的内容来识别导致页面访问缓慢的原因。
应用服务器内存设置
请参考 How to fix out of memory errors by increasing available memory 页面中的内容。
Web 服务器配置
针对高负载环境,性能可以通过在 Confluence 环境之前配置 Apache 服务器来进行提升,请参考页面 Running Confluence behind Apache 中的内容进行配置。
当你配置你新的应用服务器的时候,请确定你的配置能够有足够的线程和进程处理你的的负载。这个配置应用到 Web 服务器和应用服务器连机器上。如果可能的话,你应该为你的应用服务器启用连接池来连接到应用服务器。
可能内存泄漏的问题解决
一些外部的插件,尤其是一些插件是很久以前的了,同时也没有什么人对这些插件进行维护了,这些插件可能会在运行并且消耗内存但是却从来没有释放内存。最后的结果可能会导致 Confluence 崩溃,但是在崩溃之前可能会直接先导致性能下降。Troubleshooting Confluence hanging or crashing 页面中的内容能够帮你对这方面的问题进行调试。一些插件我们已经知道能够对系统性能造成影响并最终导致 Confluence 的崩溃。