在 Confluence 数据中心(集群)你需要分布缓存和每一个节点的缓存。在集群管理界面,将会定义分布缓存和节点本地缓存。 缓存配置文件存储在集群共享目录中的 home 目录下面。 https://www.cwiki.us/display/CONF6ZH/Cache+Performance+Tuning
在 Confluence 数据中心(集群)你需要分布缓存和每一个节点的缓存。在集群管理界面,将会定义分布缓存和节点本地缓存。 缓存配置文件存储在集群共享目录中的 home 目录下面。 https://www.cwiki.us/display/CONF6ZH/Cache+Performance+Tuning
找到配置文件 缓存的配置文件是存储在 <confluence-home>/shared-home/config/cache-settings-overrides.properties 中的。 有关 Confluence 数据中心(集群)中缓存的配置,你可以在 <confluence-shared-home>/config/cache-settings-overrides.properties 文件中找到(这个是针对集群分享的 home 目录)。 缓存键(key)映射 缓存配置文件是通过他们的 key 进行配置的。希望找到缓存配置文件的 可以,在缓存管理界面(Cache Management)使用鼠标移动到缓存的名字,在弹出窗口中你就可以看到缓存的 key 了。 https://www.cwiki.us/display/CONF6ZH/Cache+Performance+Tuning
有关 Confluence 的缓存性能如何设置,让我们看看下面的表: 缓存(Caches) % 使用的缓存(Used) % 有效率(Effectiveness) 对象/大小(Objects/Size) 命中/未命中/过期(Hit/Miss/Expiry) 附件(Attachments) 87% 29% 874/1000 78226/189715/187530 内容附件(Content Attachments) 29% 9% 292/1000 4289/41012/20569 内容正文(Content Bodies) 98% 81% 987/1000 28717/6671/5522 内容标签映射(Content Label Mappings) 29% 20% 294/1000 4693/18185/9150 数据库查询(Database Queries) 96% 54% 968/1000 105949/86889/83334 对象属性(Object Properties) 27% 18% 279/1000 5746/25386/8102 页面评论(Page Comments) 26% 11% 261/1000 2304/17178/8606 用户(Users) 98% 5% 982/1000 6561/115330/114279 缓存大小最大的数量是 1000(意思是缓存可以包含有 1000 个对象)。在必要的时候你可以增加这个值的大小,当下面 2 个条件都满足的时候: 搞使用率(超过 75%) 低有效率。 检查有效率(effectiveness)中的使用的百分比。一个缓存如果是有滴的百分比的使用率并不意味着缓存的大小少,系统将不会使用内存直到缓存被用完。 有关附件(Attachments),数据库查询(Database Queries)和用户(Users)应该增加来提高缓存的有效率。 当存储的信息变老并且不再需要使用的时候,这部分内容将会在缓存中因为过期而删除。缓存过期是基于缓存使用的频率来定义的。 当缓存同时具有低使用率和低有效率的时候,你也没有太多可以操作的的空间。随着时间的变化,更多的对象缓存进来后,可能会导致缓存有效率数据的提升。 https://www.cwiki.us/display/CONF6ZH/Cache+Performance+Tuning
Confluence 的运行状态与缓存状态有这密切的关系。针对 Confluence 的管理员来说,尤其是大型站点的 Confluence 管理员,设置好缓存尤其显得关键。 希望修改缓存的大小: 进入 > 基本配置(General Configuration) > 缓存管理(Cache Management。) 选择 显示高级视图(Show Advanced View)。 在你希望修改缓存的边上,选择 调整大小(Adjust Size)。 https://www.cwiki.us/display/CONF6ZH/Cache+Performance+Tuning
这个页面帮助你对应用性能进行提升需要进行的一些操作。这个页面不是为你对 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 的崩溃。 https://www.cwiki.us/display/CONF6ZH/Performance+Tuning
在 Windows: 打开一个命令输入框,然后修改目录到 <CONFLUENCE-INSTALL>/bin 目录中。 你需要以管理员权限运行这个命令行输入框(Run as administrator),这样你才能够完成下面的步骤: 使用下面的命令来确定 JAVA_HOME 变量被设置到 JDK base 目录: echo %JAVA_HOME% 如果你现在安装的 Java 环境为 JRE(Java Runtime Environment)或者使用的是 Confluence 安装器,替换 JAVA_HOME 为 JRE_HOME。请参考 Setting the JAVA_HOME Variable in Windows 页面获得更多信息。 请注意,在任何目录路径中的文件夹是以空格为分割符的话(例如,C:\Program Files 必须转换为 8 个字符等价的字符串,需要转换为 C:\Progra~1)。 在默认的设置中,使用下面的命令来安装服务: service.bat install Confluence 服务的名字将会被命名为 Atlassian Confluence 同时将会默认被配置为自动重启,但是不会自动重启知道你下一次对服务器进行重启。 如果你有大型的 Confluence 安装,你可以增加 Confluence 使用的最大内存数量(默认为 1024MB)。例如,你可以增加最大内存使用数量到 2048MB : tomcat9w //US//Confluence --JvmMx 2048 基于你安装的 Confluence,如果你没有任何 JVM 参数,你可以跳过这个步骤。如果你有这个参数,请添加到服务中: tomcat9w //US//Confluence ++JvmOptions="-Djust.an.example=True" 可选的,你可以使用下面的命令来运行服务器属性对话框然后导航到 Java 标签页,然后添加更多的 JVM 参数。 tomcat9w //ES//Confluence 有关更多的配置选项,请参考 Tomcat Windows Service How-To 指南。 进入 控制面板(Control Panel) > 管理工具(Administrative Tools) > 服务(Services) > Atlassian Confluence 然后右键单击 属性(Properties )来确定你的配置是正确的。使用命令行启动 Confluence 服务。 最后,启动 Confluence 服务。从现在开始,Confluence 的服务将会随着操作系统的重启而自动启动。 net start Confluence https://www.cwiki.us/display/CONF6ZH/Start+Confluence+Automatically+on+Windows+as+a+Service
基于安全的考虑,如果你希望你的 Confluence 不是在系统中以管理员的身份运行或者你使用网络驱动器来存储备份,附件和索引的话,你可以以其他用户来运行 Confluence。 希望修改用户,打开 Apache Tomcat Confluence 属性文件,进入 'Log On' 标签页,然后输入需要要的用户名和密码。 进入你的 Windows 控制面板(Control Panel) -> 用户账户(User Accounts)同时确定用户具有写入权限,针对<CONFLUENCE-INSTALL> 和 <CONFLUENCE-HOME> 目录和所有的子目录。请注意,任何网络驱动器必须通过 UNC 指定同时在影射中没有字母(例如, \\backupserver\confluence 不是 z:\confluence)。 有关更多的信息,请参考页面 Creating a Dedicated User Account on the Operating System to Run Confluence。 https://www.cwiki.us/display/CONF6ZH/Start+Confluence+Automatically+on+Windows+as+a+Service
针对长时间使用的 Confluence,我们推荐你配置 Confluence 自动随操作系统重启而启动。针对一些 Windows 的服务器,这意味着需要让 Confluence 以服务的方式运行。 有下面 2 种方式来以服务的方式安装 Confluence:使用 Confluence installer 进行安装或者使用下面描述得方式手动进行安装。 Problem with 64-bit Windows 如果你现在运行的是 64 位的 Windows 操作系统,你可能在为 Tomcat 安装为服务的时候遇到问题,如果你现在也同时使用的是 64 位的 JDK 的话。请参考我们 knowledge base article 中的内容来获得更多的信息。 以 Confluence 服务方式启用的原因 安装以 Windows 服务方式启动 Confluence 主要有下面 3 个好处: 减少因为意外关闭 Confluence 的可能性(如果你以手动方式启动 Confluence,一个控制台窗口是会打开的,这个将会增加意外关闭 Confluence 的可能性。因为你很有可能不小心关闭了这个窗口)。 在服务器重启后能够自动恢复 Confluence。 通过登录服务器的日志文件,能够增加问题解决的可能性。 有关 Window 服务的相关信息,请参考 Microsoft Developer Network 页面中的内容。 https://www.cwiki.us/display/CONF6ZH/Start+Confluence+Automatically+on+Windows+as+a+Service
在 Linux/Solaris 环境下,最好的办法是对每一个服务进行安装和配置(包括 Confluence),同时配置这些服务权限为他们所在用户需要的服务权限即可, 为实例创建一个 Confluence,使用下面的命令: sudo useradd --create-home -c "Confluence role account" confluence 来为 Confluence 的安装创建一个目录。在这个例子中,我们使用 /usr/local/confluence。 sudo mkdir /usr/local/confluence sudo chown confluence: /usr/local/confluence 以 Confluence 用户进行登录后安装 Confluence: sudo su - confluence cd /usr/local/confluence/ tar zxvf /tmp/confluence-5.6.4.tar.gz ln -s confluence-5.6.4/ current 编辑 <<CONFLUENCE_INSTALL_DIRECTORY>>/confluence/WEB-INF/classes/confluence-init.properties 文件,同时设置 confluence.home=/usr/local/confluence/<Confluence_Data_Home> (请确定你已经删除到语句前面的 '#') 然后返回到 root 用户,创建 /etc/init.d/confluence 文件(文件所需要的代码如下所示),这个代码将会允许 Confluence 在操作系统重启后再次自动启动(或者手动启动)。 如果你正在运行的是 Ubuntu Jaunty (或者后续版本),你不需要这个操作。请直接使用本页面下面的 instructions 。 #!/bin/sh -e # Confluence startup script #chkconfig: 2345 80 05 #description: Confluence # Define some variables # Name of app ( JIRA, Confluence, etc ) APP=confluence # Name of the user to run as USER=confluence # Location of Confluence install directory CATALINA_HOME=/usr/local/confluence/current # Location of Java JDK export JAVA_HOME=/usr/lib/jvm/java-7-oracle case "$1" in # Start command start) echo "Starting $APP" /bin/su -m $USER -c "$CATALINA_HOME/bin/start-confluence.sh &> /dev/null" ;; # Stop command stop) echo "Stopping $APP" /bin/su -m $USER -c "$CATALINA_HOME/bin/stop-confluence.sh &> /dev/null" echo "$APP stopped successfully" ;; # Restart command restart) $0 stop sleep 5 $0 start ;; *) echo "Usage: /etc/init.d/$APP {start|restart|stop}" exit 1 ;; esac exit 0 修改文件权限使其可以执行 sudo chmod +x /etc/init.d/confluence 设置文件为正确的可以运行级别。例如,使用 sudo chkconfig --add (Confluence 运行在 redhat 为基础的操作系统), sudo update-rc.d (Confluence 运行在 Debian 为基础的系统)。 你现在应该可以使用 Confluence 的初始化脚本来启动 Confluence了。一个成功的启动输出信息如下所示: $ sudo /etc/init.d/confluence start Starting Confluence: If you encounter issues starting up Confluence, please see the Installation guide at http://confluence.atlassian.com/display/DOC/Confluence+Installation+Guide Using CATALINA_BASE: /usr/local/confluence/current Using CATALINA_HOME: /usr/local/confluence/current Using CATALINA_TMPDIR: /usr/local/confluence/current/temp Using JRE_HOME: /usr/lib/jvm/java-1.7.0-oracle done. 你应该可以看到 Confluence 运行在 http://<server>:8090/ Confluence 运行的端口是定义在 server.xml 文件中的。 为 Ubuntu Jaunty (及其后续版本)添加 Confluence 为服务 为了让 Confluence 能够在 Ubuntu Jaunty(及其后续版本中)以服务的方式进行启动: 以 Confluence 用户的方式登录 logging in 系统后,进行安装 Confluence,在 /usr/local/confluence 中创建启动和停止脚本。启动脚本的示例如下: #!/bin/bash export JAVA_HOME=/usr/lib/jvm/java-7-oracle-1.7.0.71/ export JDK_HOME=/usr/lib/jvm/java-7-oracle-1.7.0.71/ cd /usr/local/confluence/current/bin ./startup.sh 停止脚步示例: #!/bin/bash export JAVA_HOME=/usr/lib/jvm/java-7-oracle-1.7.0.71/ export JDK_HOME=/usr/lib/jvm/java-7-oracle-1.6.0.71/ cd /usr/local/confluence/current/bin ./shutdown.sh 让上面 2 个脚本同时可以执行。例如,通过下面的命令: sudo chmod a+x /usr/local/confluence/start /usr/local/confluence/stop. Karmic 和后续版本:创建 2 个文件在 /etc/init/ 文件夹中,文件名分别为 confluence-up.conf 和 confluence-down.conf:confluence-up: start on runlevel [2345] script date >> /tmp/confluence-startup.out exec sudo -u…
Confluence 需要依赖一些 Java 的库才能够允运行。一些依赖的 Java 库应用了 Java 的语言特性,但是又是被 Java 的安全策略所限制的。 这个通常来说是不会造成任何问题的。默认的安全配置策略通常对运行 Confluence 没有任何影响。但是在一些共享服务器或者企业部署环境下,安全设定可能会导致 Confluence 不能正常的工作。 当你尝试运行 Confluence 的时候,你可能会遇到下面的错误: java.security.AccessControlException: access denied (java.lang.RuntimePermission accessDeclaredMembers) at java.security.AccessControlContext.checkPermission(AccessControlContext.java(Compiled Code)) at java.security.AccessController.checkPermission(AccessController.java(Compiled Code)) at java.lang.SecurityManager.checkPermission(SecurityManager.java(Compiled Code)) 运行 Confluence 所需要的权限在下面简单的安全配置文件中。你可能需要将这个信息给你的系统管理员,这样你的系统管理员才可以部署 Confluence 应用。 grant codeBase "file:${catalina.home}/webapps/confluence/-" { permission java.security.AllPermission; }; grant { permission java.lang.RuntimePermission "accessDeclaredMembers"; permission java.lang.reflect.ReflectPermission "suppressAccessChecks"; permission java.lang.RuntimePermission "defineCGLIBClassInJavaPackage"; }; https://www.cwiki.us/display/CONF6ZH/Java+Policy+Settings+for+Enterprise+or+Webhosting+Environments