- 浏览: 483996 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
alvin198761:
renzhengzhi 写道我参与过12306余票查询系统的开 ...
别给12306 辩解了 -
renzhengzhi:
我参与过12306余票查询系统的开发,用户请求被前面3层缓存拦 ...
别给12306 辩解了 -
renzhengzhi:
写的很好。
JAVA线程dump的分析 -
liyonghui160com:
说好的附件呢
分布式服务框架 Zookeeper -- 管理分布式环境中的数据 -
ghpaas:
orbeon作为xforms标准的实现,不论其设计器还是运行时 ...
XForms 1.1 中文翻译—第1章 关于XForms标准
这是由五个部分组成的有关 Java 性能的系列的结束部分。本系列中的第一篇文章奠定了性能优化的基础,第 2、3 和 4 篇文章考虑了会影响系统可伸缩性和吞吐量的各种瓶颈。本文介绍两个先前未涉及到的重要主题,并提供案例研究和参考资料。 一个常见问题 (FAQ) 是如何将特定于 Sun 的命令行开关转换为特定于 IBM 的开关。此外,任何严格的性能优化工作,例如基准测试,都不能忽略系统范围的优化。我们将在下一个部分中简要讨论这些主题。 随后是几个案例研究,尝试说明如何应用本系列中描述的工具和技巧来解决实际中的问题。重点在于了解和学习如何使用本系列中提到的工具和技术。 最后通过回顾有用的参考资料结束本文和本系列。 本部分讨论如何将 Sun Java 配置转换为 IBM Java 配置,以及针对 AIX 应用程序的系统范围的优化。这些主题的范围相当大,我们只是略微触及皮毛。 如果您有一个为 Sun Java 而优化过的应用程序,并且正在尝试将应用程序迁移到 AIX(或迁移到任何运行 IBM Java 的平台),您可能已经完成了最艰巨的工作。了解应用程序特征只是成功的一半。基于对使用 Sun Java 进行优化工作的了解,您可以使用第 2 部分和第 3 部分 中阐述的优化技巧。 但是,我们经常收到有关如何将特定 Sun Java 命令行开关转换为等效的 IBM Java 命令行开关的询问。这些开关几乎始终对应于垃圾收集,因为经过充分优化的 GC 对任何基于 Java 的应用程序的性能都非常重要。由于 JVM 体系结构方面的区别,Sun 和 IBM 开关之间的映射非常困难。IBM Java 没有包含分代的垃圾收集器 (Generational Garbage Collector),并且不支持任何以 下表尝试将 Sun Java GC 命令行开关转换为等效的 IBM 开关。此映射基于特定于 Sun 的文章“Tuning Garbage Collection with the 1.4.2 Java™ Virtual Machine”中描述的 Sun 开关的功能。此表只用于定位 IBM Java 的等效(或近似)开关这个非常特定的目的。这并不意味着取代优化实践,因为即使是堆大小要求也会差异相当大。有关 IBM Java 的一般 GC 优化技巧,以及有关 IBM Java 的这些和其他 GC 开关的信息,请参见“Fine-tuning Java garbage collection performance”。此表的创建并不涉及任何性能相关的测试,而是完全基于上面引用的参考资料中的 Sun 开关用法的文档记录。 正如上表所示,大多数情况下,把 Sun 平台上的开关转换到 IBM 平台的方式就是丢弃这些开关。这使得针对 IBM Java 的GC 优化工作相当简单,同时仍然提供卓越的性能。 使用诸如 但是对于大多数多层应用程序(尤其是基准测试),系统范围的优化是不可避免的。存在若干可用于 AIX 性能优化的优秀资源可供您参考。要了解通常需要的优化类型,您可以查看实际的已发布基准。如果查看最近针对 AIX 上的 IBM Java 的 SpecJBB 2000 结果,比方说 http://www.spec.org/osg/jbb2000/results/res2003q3/jbb2000-20030624-00194.html,则操作系统优化如下所示: 警告:切勿在没有充分了解后果的情况下应用这些设置,因为不正确使用这些设置实际上会恶化系统性能。 那么上述设置有何作用呢?参阅 AIX 文档,您很快就可以更好地了解这其中每个设置是做什么用的。让我们依次研究一下其中每个设置。 最后, 因此可以看到系统被切换到大型页和固定优先级的调度程序,以达到 SpecJBB 2000 基准的记录数据。您能否在自己的应用程序中使用这些相同的设置呢?也许不能,但是您现在能够研究这些命令和调度策略,并进行试验以适合自己的应用程序特征。这是性能优化中的下一步。 在本部分中,我们将查看一些示例,这些示例取自 Java Service 团队处理过的具体问题。这些示例能够让您清楚了解如何进行性能优化,以及如何使用各种工具来收集可用于性能优化工作的信息。请注意,本部分的案例不是基于问题在实际工作中的出现频率来选择的。重点在于了解如何使用本系列中讨论的各种工具和技术来定位和纠正性能问题。 报告的问题是基于 Java 的应用程序的响应时间不可接受。使用 观察 GC 日志确认了堆扩展得太频繁。这与接二连三的多次分配故障和非常满的堆相结合,导致了 Java 应用程序花大量的时间尝试分配空闲块,未找到空闲块,扩展堆,然后仅满足当前分配请求。 这可以通过为 第一步是使用 AIX 工具来确认这是与 Java 相关的问题。在 AIX 工具指示这是与 GC 相关的问题这个事实的指导下,第二步可以是直接集中于 GC 日志。第三步是使用可用的优化参数来中断应用程序陷入的异常周期,从而允许恢复多余的 CPU 时间。 另一个有趣的场景是作为性能问题提出的,其中 CPU 在大多数时间都处于繁忙状态。通过查看 verbosegc,我们看到有一个 GC 周期被调用的太过频繁,从而导致应用程序的大多数时间只是花在执行 GC 上。 verbosegc 跟踪表明,大多数 GC 活动都是由于超大型对象的多次分配所导致的,该对象的大小约为 10 MB 或更大。这些活动导致了堆碎片,使得 GC 周期更长,从而影响了性能。但是通过查看 verbosegc 周期,客户无法确定这些对象是什么。 确定问题根源的最容易方法是使用 HeapRoots 工具来分析堆转储 (heapdump)。但是该场景还存在另一个难解之处:那些大型对象并没有存活到 GC 周期之后。因此堆转储没有显示任何具有此类大小的对象。 对于定位和纠正应用程序源代码中的问题来说,这是分析(profiling)如何能够成为有用助手的经典示例。Java 虚拟机分析接口 (Java Virtual Machine Profile Interface) 使得此问题变得微不足道。对于这个特定示例,我们使用了 Using JVMPI to Identify Large Memory Allocations 上描述的方法的一种变化形式,并且能够快速确定执行此分配的代码。 作为本文的最后一个案例研究,我们将讨论一个其表现似乎为简单的大小调整问题的场景。曾经尝试将该应用程序扩展到 1000 个用户,并且应用程序将会耗尽 Java 堆空间。基于用户数量来计算堆需求后,将堆大小从 1 GB 增加到了 1.5 GB。 但是这样触发不是由于 Java 堆带来的 OOM 错误。Java 堆显示了足够的空闲空间,但应用程序日志表明发生了 OOM。通过使用 为了进一步深入研究,我们添加了命令行开关 一般情况下,我们尝试通过增加 JNI 引用数量来绕过该问题(如果指定更高的 -Xoss 值,则会呈比例地增加上限)。但这只是延迟了不可避免的问题,大量的固定 JNI 引用导致的严重 Java 堆碎片并没有任何好转。 进一步研究应用程序的设计揭示了真正的根源:应用程序创建了无限数量的线程。随着测试的继续,线程将等待终结器,而且由于终结器是不可预测的,因此存在大量的此类线程在等待释放它们的 JNI 引用。在此情况下,唯一可行的解决方案是更改应用程序代码以纠正这两个问题。一旦应用程序将无限数量的线程替换为线程池,并且尽可能替换终结器,大小调整工作就胜利完成了。 此案例表明,有时候问题的原因是一些深层次的因素。Java 堆耗尽的问题最终证明是设计问题。Java 和本机堆的平衡通常是性能优化的关键部分,但在此例中是不足够的。手边拥有如此多的工具和技术可以让您了解更全面的情况,使您能够做出应该优化什么对象的精明决策。 本文将结束整个系列。希望本系列成为最大化 AIX 上的 Java 应用程序性能的宝贵指南。 作者要感谢 Ashok Ambati、Rajesh Jeyapaul、Sharad Ballal、Roger Leuckie 和 Mark Bluemel 为这些文章提供的帮助和建议。特别要感谢 John Tesch,他的有关 AIX Java 性能的信息集合是本系列的主要灵感之源。
-XX
开头的命令行开关。IBM Java 的“完全独立”体系结构也不基于 Sun HotSpot 体系结构。最容易并且在大多数情况下最快的方法是在 IBM 平台上运行应用程序时丢弃所有特定于 Sun 的设置,并根据需要进行微调。但是如果您对某些 Sun 开关如何映射到 IBM 开关感到好奇,请继续阅读。
Sun 开关
等效的 IBM 开关
说明
-Xms、-Xmx
-Xms、-Xmx
这些参数及其含义保持不变。您仍然需要执行堆大小调整。
-XX:SurvivorRatio、-XX:NewSize、
-XX:MaxNewSize、-XX:NewRatio无
这些开关可简单地删除,因为它们用于 GC,而 GC 不适用于 IBM Java。
-XX:MinHeapFreeRatio、-XX:MaxHeapFreeRatio
-Xminf、-Xmaxf
堆扩展/收缩受其他因素而不只是受这些开关的控制。
-Xverbose:gc、-XX:+PrintGCDetails
-Xverbose:gc
IBM Java 的 verbosegc 跟踪格式与 Sun GC 区别相当大。可以根据需要启用更详细的跟踪,但是在大多数情况下,缺省的 verbosegc 跟踪就足够了。
-XX:+UseParallelGC、-Xincgc、-XX:+AggressiveHeap
无
这些是 Sun 支持的各种类型的垃圾收集器。它们不适用于 IBM Java。
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-Xgcpolicy:optavgpause
并发低暂停 (Concurrent Low-pause) 收集器的作用接近于 IBM 并发标记(但在设计上是不必要的)。
-XX:+CMSParallelRemarkEnabled
无
不适用于 IBM Java。
-XX:ParallelGCThreads
-Xgcthreads
至少对于 IBM Java,更改此设置是不可取的。
-Dsun.rmi.dgc.client.gcInterval、-Dsun.rmi.dgc.server.gcInterval
-Dsun.rmi.dgc.client.gcInterval、-Dsun.rmi.dgc.server.gcInterval
请参见第 4 部分中的技巧 NIO003。
schedo
和 vmo
等 AIX 工具具有系统范围的影响,因此对这些工具的全面介绍超出了本系列的范围。有关这些工具的更多信息,请参见参考资料部分。
操作系统优化
SPINLOOPTIME
控制系统在让步于另一个进程之前重试某个繁忙锁的次数。由于缺省值为 40,更高的值将告诉系统应该尝试更长的时间以待锁释放。在多处理器系统上,这样会导致更好的性能,因为忙锁重试的开销要比进程上下文切换的开销低。vmo
行设置大型页的大小和数量。查看一下 Java 命令行开关,您将看到正在使用 -Xlp
。该开关启用 Java 中的大型页支持,白皮书”AIX Support for Large Page“对该开关进行了更详细的描述。如果您有内存密集型应用程序,可以试验大型页以确定它是否有帮助。与 Java 配套的 SDK 指南中提供了有关此主题的更多信息。setsched
行实际上是一个脚本而不是 AIX 命令。它调用 thread_setsched
内核服务以选择固定优先级的循环调度,并对该 Java 进程使用优先级 40。schedtune
命令也是 AIX 5.2 以上版本中的一个脚本,它将传递的参数映射到新的 schedo
命令。上面这一行命令是将固定优先级线程的时间片更改为 400 个计时单元。它还强制固定优先级的线程驻留在全局运行队列中。vmtune
命令将该调用转换为等效的 vmo 调用,并且上面的行还启用了共享内存段的固定。
topas
,然后使用 vmstat
,结果发现 Java 是消耗最多 CPU 的应用程序。使用 tprof,出现的函数中具有 GC 相关的术语,因此这指示可能存在 Java 堆大小调整方面的问题。-Xmine
指定更大的值来修复,从而迫使堆增长得更快(请参见第 3 部分中的技巧 MEM003)。其结果是单次扩展即可避免多次潜在的分配故障。svmon
,发现仅有大约 4 个段(或 1 GB)用于本机堆,第四个段似乎差不多是空的(请参见“Getting more memory in AIX for your Java applications”中的“Balancing Memory”)。-verbose:jni
。作为此开关的结果而打印的额外消息表明全局 JNI 引用池被耗尽了,发生这种事情是非常少见的。全局 JNI 引用池足够大,以确保大多数正常应用程序决不会耗尽它(甚至是接近耗尽它)。
学习
发表评论
-
Storix简介
2012-03-27 12:10 1065简介 Storix ... -
asa阿萨
2012-03-25 23:58 1阿迪撒旦撒旦 -
适配器布局
2010-10-28 11:23 971网络性能取决于所选的硬件,如机器中的适配器类型和适配器布局 ... -
工作负载管理诊断
2010-07-13 23:15 850工作负载管理仅指评估工作负载的每个组成部分的优先级。 ... -
与磁盘或内存相关的问题
2010-07-13 23:12 883与磁盘或内存相关的问题 正如大部分实内存可用来缓冲文 ... -
在 AIX V5.3 中使用 MALLOCDEBUG 隔离并解决内存泄漏
2010-07-01 15:02 1270引言 在编写应用程序 ... -
分析AIX上的native内存泄露
2010-07-01 14:59 1489Running native profiling on ... -
AIX性能——预处理器和编译器利用
2010-06-27 20:37 1067在指令重新整理中,有几个优化级别给予编译器以不同程度的自由 ... -
AXI性能——系统调整
2010-06-27 20:37 880在有效实现应用程序后,系统总体性能的进一步提高就成了系统调 ... -
AIX性能调整——当前的机器指令
2010-06-27 20:35 906如果未出现 TLB 或高速缓存未命中的情况,绝大多数机器指令都 ... -
可分派线程
2010-06-27 20:33 870当某个线程可分派但不在运行时,它不能完成任何有用的事情。更糟的 ... -
等待线程
2010-06-27 20:31 941无论何时只要执行的程序发出不能立刻满足的请求,例如同步 I ... -
AXI性能调整——中断处理程序
2010-06-27 20:30 1082通知操作系统发生了外部事件的机制是中断当前运行线程并将控制 ... -
AIX性能调整——可执行程序
2010-06-27 20:28 962当请求运行某个程序 ... -
AIX性能调整——硬件层次结构
2010-06-27 20:26 1021通常,从一个硬件级别移动到另一级别所需要的时间主要由较低级 ... -
AIX性能调整——程序执行模型
2010-06-27 20:21 928为了清楚地检查工作负载的性能特征,需要有一个动态而非静态的 ... -
AIX4.3 TL12安装指南
2010-06-18 11:01 1182Installation instructions Te ... -
系统工作负载
2010-05-16 22:40 823系统工作负载的完整准确的定义对于预测或理解它的性能是很关键 ... -
列出可用的软件产品(lslpp 命令)
2010-05-13 09:16 1192要显示关于系统上可用软件产品的信息,请使用 lslpp 命 ... -
列出可用的字体(font 命令)
2010-05-13 09:14 1195要显示可用于显示器的字体列表,请使用 lsfont 命令。 ...
相关推荐
- **jconsole**和**jvisualvm**:Java自带的性能监视工具,提供详细的JVM内存和线程信息。 通过理解这些概念和准则,并熟练运用AIX的监控工具,开发者可以有效地在AIX环境中优化Java应用程序的性能,确保系统稳定...
这个由五个部分组成的系列提供了若干技巧和技术,这些技巧和技术通常用于优化Java?应用程序,以便在AIX?...本系列文章向您展示了如何结合使用AIX和Java工具,以最大化基于AIX的Java应用程序的性能。第1部分(“基
作者 Doug Monroe 和 Martin Brown 提供了一个逐步指南,旨在帮助开发者理解和实践在AIX上集成Java和PHP的方法。 首先,文章介绍了PHP作为一种流行的Web开发语言,其快速原型设计和易于混合HTML的能力,适合用于...
综上所述,这套IBM AIX中文参考资料提供了全面的AIX学习路径,无论是初学者还是经验丰富的系统管理员,都能从中受益匪浅。通过深入学习并实践这些知识,可以提升在AIX环境下的操作能力和问题解决能力,从而更好地...
<br>· AIX 5L Version 5.2 Technical Reference: Base Operating System and Extensions Volume 1 and AIX 5L Version 5.2 Technical Reference: Base Operating System and Extensions Volume 2 provide ...
标题与描述概述的知识点主要集中在AIX系统的性能优化策略,特别是针对处理速度的提升,重点关注的是CPU性能。本文将深入探讨这些知识点,提供一个全面的视角来理解AIX性能优化的关键方面。 ### AIX性能优化基础概念...
本文旨在详细介绍如何在 IBM AIX 6.1 操作系统环境中进行 Java JRE 和 SDK 的安装及卸载,并对相关的环境变量配置方法进行了详尽的说明,帮助用户在该平台上顺利搭建起 Java 开发与运行环境。 #### 二、准备工作 ...
AIX系统java包,Java8_64.jre.8.0.0.705,Java8_64.sdk.8.0.0.705
第 5 楼:常用AIX论坛地址、资料下载地址、FTP地址 第 6 楼:AIX操作系统使用心得 第 7 楼:AIX环境如何找到活动最频繁的进程 第 8 楼:AIX中查看用户对系统资源的使用情况 第 9 楼:AIX的系统备份和恢复 第 10 楼:...
13. **日志分析**:定期分析系统日志,查找异常行为和性能下降的线索。 14. **负载均衡**:在多处理器系统中,平衡进程在CPU之间的分布,避免单个CPU过载。 15. **计划任务调度**:合理安排批处理任务的执行时间,...
它和本人整理的另一个“UNIX-IBMAIX5L参考-命令参考大全.chm”可以说是本人从unix入门到深入的红宝书和蓝宝书。 仅列出性能管理的目录如下: [ 页的底部 | 上一页 | 下一页 | 目录 | 索引 | 资料库 | 法律 | 搜索 ] ...
在IBM AIX V5.3系统中,文件系统是管理和组织数据的核心机制。本文档,"AIX维护手册第3部分:文件系统.pdf",...通过深入学习和实践,管理员能够更有效地管理和维护AIX环境中的文件系统,从而提高系统的稳定性和性能。
为了确保应用程序的稳定性和性能,了解IBM JDK 1.7在AIX上的性能优化策略也是必要的。这包括了解如何调整JVM参数,如-Xms和-Xmx以控制内存分配,以及如何利用IBM JDK特有的性能监控工具来分析和优化应用程序。 总的...
· AIX 5L Version 5.2 Technical Reference: Base Operating System and Extensions Volume 1 and AIX 5L Version 5.2 Technical Reference: Base Operating System and Extensions Volume 2 provide information ...
标题“AIX v6.1命令参考大全,卷 5:s - u”意味着本参考资料是针对IBM的AIX操作系统版本6.1中的命令集合,具体涵盖从字母s到字母u的命令。AIX(Advanced Interactive eXecutive)是IBM开发的一个商业UNIX操作系统,...
本文将深入解析在AIX系统环境下,如何通过设置特定环境变量来有效收集Heapdump和JavaCore,以及相关的重要操作步骤,以供WebSphere应用服务器(WAS)的管理员或开发者参考。 ### AIX系统下收集Heapdump和JavaCore的...
通过`netstat`命令和性能监控工具,可以实时查看网络状态并定位问题。 2. **系统性能分析与调优**: 这涉及到整体系统资源的使用情况,包括CPU、内存、磁盘I/O等。通过对系统负载、进程状态、系统调用等信息的分析...
AIX 5L是AIX的一个版本,它强调了在大型机、工作站和服务器上的高性能和高可用性。AIX 5L版本5.2则是该系列中的一个具体版本,发布于2003年左右。这一版本提供了许多改进和新特性,包括增强的安全性、更好的性能以及...
本篇将详细介绍在AIX主机上如何生成和获取javacore的方法。 首先,你需要通过网络连接到AIX主机。这里以telnet为例,你可以输入`telnet 192.168.1.3`,其中`192.168.1.3`是AIX主机的IP地址。登录时需要提供用户名和...