快速业务通道

实时Java,第5部分 - 编写和部署实时Java应用程序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
s -version  -Xmca32K    RAM class segment increment  -Xmco128K    ROM class segment increment  -Xms64M     initial memory size  -Xgc:immortalMemorySize=16M immortal memory space size  -Xgc:scopedMemoryMaximumSize=8M scoped memory space maximum size  -Xmx64M     memory maximum  -Xmso256K    OS thread stack size  -Xiss2K     java thread stack initial size  -Xssi16K    java thread stack increment  -Xss256K    java thread stack maximum size java version "1.5.0" Java(TM) 2 Runtime Environment, Standard Edition (build pxi32rt23-20070122 (SR1) ) IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 Linux x86-32 j9vmxi32rt23-20070105 ( JIT enabled) J9VM - 20070103_10821_lHdRRr JIT - 20061222_1810_r8.rt GC  - 200612_11-Metronome RT  - GA_2_3_RTJ--2006-12-08-AA-IMPORT) JCL - 20070119 [andhall@rtj-opt2 SweetFactory]$

实时Java,第5部分 - 编写和部署实时Java应用程序(17)

时间:2011-06-22 Caroline Gough

我们为各任务分配的作用域内存比较充足:每个 NHRT 100KB,我们为各生产线创建了 11 个 NHRT。可利用这些数字它来预估为使用 -Xgc:scopedMemoryMaximumSize 来尝试某些更积极的工作负载所需的作用域内存的总量。

例如,要以 10 毫秒的周期运行 50 个生产线,我们至少需要 55MB 作用域内存。我们将使用 60MB,以便有一定的活动余地。我们将用来运行这一场景 60 秒的命令是:

java -Xrealtime -Xnojit -Xgc:scopedMemoryMaximumSize=60M -jar sweetfactory.jar 60 50 10

如果您足够大地增加了生产线的数量(约 10 毫秒的间隔 70 个似乎是我们系统的极限),演示程序就会开始遗漏罐子。发生这种情况时,您将看到一条类似于下面这样的消息打印到控制台:

Error: measurement pool exhausted 1175439878160 : Missed 20 jars!

第一条消息来自轮询线程,当轮询线程尝试和未能成功从池中获取 measurement 时发出。第二条显示了轮询线程最终设法获得一个 measurement 对象时遗漏了多少个罐子。

在这些场景中,大多数 CPU 时间都用在处理传入的度量结果上。随着负载的增加,不再有足够的时间来运行 Metronome 和写出审计日志。度量结果在审计系统前构建到队列中,耗尽度量结果池。仅当度量结果用完、轮询线程被迫等待更多内容返回时,日志记录线程才会获取其写日志及将部分度量结果返回池。

实现提示与技巧

使用 WebSphere Real Time 约 1 年之后,我们归纳出一些使 RT 应用程序发挥最大作用的提示与技巧。这一节介绍了其中最有用的几条。

设定线程类型和存储区验证

使用非堆内存进行开发时,必须谨慎考虑您在哪个存储区中、何种线程之上执行代码的各行。

执行非法分配或(比如说)尝试从 java.lang.Thread 进入一个存储区非常有可能导致令人迷惑的 bug。

在代码中放置 assert() 语句来进行参数的健全性检查是 Java SE 中的一项良好的编程实践,在 RT Java 代码中,对线程上下文和您所在的存储区进行断言是明智的。

示例 Sweet Factory 应用程序包含专用的 ContextChecker 类,它提供一个 checkContext 方法和一组常量,来表示不同的上下文。

为错误处理预留 runnable 对象和存储区

在标准 Java 代码中 —— 多亏有其托管内存环境,错误处理只是又一块代码。在非堆 RT Java 中,错误处理则是一个大麻烦。

如前所述,您希望在 NHRT 上执行的大多数任务都占用内存,您必须为那些特殊的任务校准作用域的使用或轮询对象。

如果遇到错误,即便简单的行为,如打印一条错误消息,都会突然变得困难重重,

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号