金蝶K/3产品性能稳定性优化指导手册
5.3中间层COM+问题解答
5.3.1 如何解决COM+/MTS 4097 错误事件?
当COM/COM+应用程序发生违例时, 会在操作系统事件日志中产生4097事件。当发生这个错误时,可以按照下列步骤检查: (1)升级MDAC到最高版本
(2)如果应用程序存取第三方数据库软件,确保客户端软件与COM+/MTS兼容 (3)使用OleView.exe确认组件能够被实例化 (4)升级操作系统到最新的Service Pack
(5)如果程序由VB编写,在编译前, \Execution\和\in Memory\选项需要使能
(6)服务器端使用最新的VB运行时文件 (7)具有强健的出错处理程序
5.3.2 不支持事务的组件是否能放入COM+应用程序中?
事务处理和对象请求代理是COM+/MTS 编程模型的两个重要的组成部分。 不包含事务处理的组件仍可以利用分布式组件对象模型和COM+/MTS的进程级安全系统。这样, COM+/MTS 被用来管理对象实例和对象生命周期。
5.3.3 如何在安装完COM+ Application Proxy之后, 修改远端服务器名?
首先要安装Windows 2000 Service Pack 1 或以上版本。 然后在应用程序属性中选择Activation对话框,在里面填入远端服务器的IP地址或机器名。
5.3.4 VB在COM+和MTS中创建对象有何异同点?
在MTS中,必须在根对象中用ObjectContext.CreateInstance来创建子对象。 这种方法在COM+仍然可行, 但不是必需的。 COM+可以使用VB标准的CreateObject函数, 正确将事务转移到子对象。
5.3.5 需要开启哪些端口以使MSMQ能够透过防火墙存取?
只发消息: TCP 1801
发消息和活动目录存取: TCP 1801, RPC 135, 2101
收发消息和活动目录存取: TCP 1801, RPC 135, 2101, 2103, 2105。
5.3.6 把COM+ 应用程序导出为Application Proxy后, 安装到Windows NT 或 Windows 98上时, 为什么CreateObject()会产生”class not registered”错误?
在客户端用regedit观察, 发现组件CLSID并没有注册。 这个问题将在安装Windows 2000 SP3之后解决。
5.3.7 如果COM+应用程序中的组件依赖于其他的组件或动态链接库,将COM+应用程序导出为Application Proxy并试图安装在Windows 2000上时, 会出现下列错误:Error registering COM+ Application. Contact your support personnel for more information。
这个现象只发生于安装Application Proxy到Windows 2000客户端时。即使安装的是Application Proxy,Windows Installer也会试图对所依赖的动态链接库等调用LoadLibrary()。因此,如果LoadLibrary()找不到相应的动态链接库, 就会出现此错误。
- 36 -
金蝶K/3产品性能稳定性优化指导手册
有下列方法可以解决此问题:
1)先将所依赖的动态链接库拷贝到客户机的winnt\\system32目录, 再安装Application Proxy。
2)生成自己的安装程序,写入DCOM所需的注册表项目。
5.3.8 做大的查询时COM+组件调用时间过长,此时若客户端用户人为结束进程,COM+还是一直在转,需要几分钟后COM+才能释放
客户想强行关闭时,告诉用户还在运行,有一种通知机制,避免用户以为没有在执行而人为结束进程。
若事务运行时间真的这么长,可以优化设计,改成多个小事务或采用异步查询(马上返回,用户查询状态:进行,完成)。
可以通过com+admin的killComponent方法停止COM+组件,但不建议使用,会影响其他用户。
5.3.9 如何优化进程间通讯(包与包间的调用),提高性能
K/3有很多基础的COM+组件经常要被其他包的COM+组件调用,这样会影响系统性能,建议对一些经常调用的基础组件配置为Library application,即通过中间层包的分层解决,减少调用的性能损耗,但需要注意:
(1)远层不能调用配置为Library application的COM+组件,需要再包多一层供远程调用 (2)防止组件导致进程崩溃影响其他同一进程内的其他组件,要有完善的出错处理机制。
也可以考虑在实现外部接口时,如果同时存在进程间通讯或包内的组件间调用,通过公共类的引用来实现,以便减少性能损失。另外,可以使用K/3性能监控工具查看各方法调用的占用时间。
5.3.10 防火墙导致COM+不能访问的问题
WIN2003启用防火墙后不能创建COM+组件,安装瑞星杀毒软件后不能连接COM+组件,这些都是因为防火墙禁止某些端口造成COM+不能访问,可以通过放开一些端口,然后修改REG使COM+使用这些端口即可。可以使用http://www.sysinternals.com上的TcpView工具查看相关端口。
5.3.11 COM+包[安全属性]设置中如果设置身份验证级别为无会有什么影响,对性能提升有无帮助?
COM+的身份验证级别改为无会提高性能,但其他用户若知道COM+接口可随意调用,存在安全性问题,建议按默认设置。
有安全性级别认证需要域用户。
5.3.12 如何更好地部署COM+,需要遵循什么原则
COM+分包原则:按工作量分包,保证各个包工作量的均衡。
5.3.13 VB组件能否支持对象池
实现对象池组件需要实现IOBjectctrol接口并设置canbepooled为true,同时组件需要支持聚合,即组件释放时会聚合到COM+对象池中,并没有真正释放。因而VB组件实现不了。
5.3.14 3G补偿的作用
- 37 -
金蝶K/3产品性能稳定性优化指导手册
内存的一个设置,WIN默认每个进程的最大内存为4G:其中2G用户空间,2G核心空间。使用3G后,用户空间会涨到3G,而系统核心空间缩小到1G。主要为应用程序增加内存使用。
5.3.15 在中间层MODULE能不能执行SQL
可以,但是不能定义ADO或CONNECTION为全局变量,否则会成为性能瓶颈。任何COM对象一般都不建议声明成全局变量。COM+是无状态(Stateless)的。
5.3.16 .Net调用自动COM+时,并发性能较差
在.Net调用自动COM+时,在压力测试情况下发现30%的时间都消耗在建立COM+对象上,并发性能较差。
.net由于是托管的代码,在调用COM+性能会比VB调用COM+慢很多。但是随着微软新操作系统的出现,到时候将会倒过来。
1、由于采用自动事务的COM+都采用垃圾回收,每次调用时都会重新创建新的COM+对象,导致创建时间将会消耗大量性能,因此需要尽量减少COM+的调用。而HR现在采用的外围采用委托事务的方法将是很好的解决方案。
2、对于仍然采用自动事务的COM+代码,建议采用COM+对象缓存池,具体使用案例由微软工程师提供。
3、建议COM+组件要均衡配置,按工作量分包,保证各个包工作量的均衡。
5.4中间层非COM+性能优化
5.4.1 停止K/3系统相关服务
1、若没有使用管理驾驶舱模块,请将中间层服务器上的Apache Tomcat服务停止。
- 38 -
金蝶K/3产品性能稳定性优化指导手册
2、若没有使用人力资源系统(HR),请将中间层服务器上的HRJobProcess服务停止。方法同上。
3、若没有使用远程传输系统(iMts),请将中间层服务器上的Kingdee iMTS Service服务和Kingdee iMTS Event Server停止,方法同上。
5.4.2 域服务器、中间层服务器、数据库服务器分开部署
- 39 -
金蝶K/3产品性能稳定性优化指导手册
6. 客户端性能问题
6.1 客户端性能问题介绍
客户端表现出来的性能问题,一般可以反映到数据库或中间层的优化上,最后没有办法才到代码级别的优化。
6.1.1 某些客户端的速度比以往使用K/3慢一点
客户反馈:
某些客户端的速度比以往使用K/3慢一点 处理分析:
大多数是客户端的硬件配置可能偏低,而且使用了WIN98操作系统,建议客户适当升级客户端的硬件配置,使用win 2000 professional操作系统,或者建议客户把使用频繁的K/3客户端作较好的配置,在不增加硬件的情况下对已有的pc做调剂。同时,告诉客户K/3系统之所以可能比他们以前用的小系统慢,是因为功能的复杂性,如提供了并发控制的网络控制和严密的授权逻辑。重要的是能够满足客户的日常业务。
硬件配置建议客户端CPU主频2G或以上,内存至少256兆(推荐512兆)
6.1.2 某些局部功能速度太慢
客户反馈:
局部功能点速度很慢,很可能会引发整个系统的瘫痪,进而导致所有其它功能点都变得很慢,甚至出现死机(实际是得不到系统资源,处于长期的等待中)现象。这些比较慢的功能点一般包括大数据量的物料(商品)收发汇总表查询,期末结账,成本计算等功能
典型示例:
第 I 条 计算类——期末结账,MRP运算,凭证生成,成本计算 第 II 条 查询类——报表(物料收发汇总表),序时簿 第 III 条 日常票据处理业务
处理分析:
对于上面谈到典型局部功能点慢的问题,首先寻求技术支持或者从技术支持网站查询相关补丁,若是一个通用的问题,可能已经有了相关的补丁。如果没有相关的补丁解决,请提交研发,这些与客户日常业务密切相关的操作,必须要能满足客户的要求。当然针对根据不同类别有不同处理建议。
(1)对于计算类,如果不是日常功能,建议客户尽量不要安排在业务高峰期做,以免影响其它功能点;
(2)对于查询类,建议客户根据自己需要设置查询过滤条件,避免不做任何过滤做大数据量的查询,从应用方式避免出现性能问题。
(3)对于日常票据处理业务,特别是与客户日常业务密切相关的操作,如果没有相应的性能补丁,请迅速提交研发跟踪处理。
6.1.3 客户端出现Automation 错误
关于Automation错误的成因也是多方面的,最多的是支持软件如:WINDOWS文件、系统控件等,都有可能导致问题的出现。当然,K/3自身的问题也存在。Automation错误,是
- 40 -