套接字通信中没有读取过程
本部分讨论在 AIX 平台上的套接字通信中经常遇到的一个问题。性能测试是一件好事情。它可以帮助您找出不如功能测试中找到的错误那么明显的错误。这些错误包括内存泄漏和多线程编程的争用条件。它们就像您代码中的捣蛋鬼,有时可能会使您的代码行为异常。
在这个性能测试场景中,测试客户端向运行于 Application Server 上的 Web 应用程序发送 Web 服务请求。该 Web 应用程序处理请求并构造一个新消息,然后将新构建的消息发送到一个网关。然后网关向该 Web 应用程序发回一个响应,该 Web 应用程序再向测试客户端发送一个响应。图 2 显示了该过程流。
图 2. Web 应用程序的性能测试
陷阱
上述场景非常常见,并且很容易在功能测试中验证。然而,在性能测试中,当企业应用程序经历很高的事务处理速度(Transaction Per Second,TPS)时,如果没有预先执行性能测试,您的应用程序很可能会引发异常。
异常发生在套接字通信中,其主要特征为:java.net.SocketException: There is no process to read data written to a pipe
“There is no process to read data written to a pipe”错误是一个特定于 AIX 的错误消息,位于对应的 Java 代码的本机方法实现中。它是由在 AIX 上实现套接字通信的 C 代码所引发的。
正如该消息所述,它是在写入某个管道的消息没有被任何进程读取时发生的。当向接收端发送大量请求时,接收端可能由于超时、线程被阻塞或其他原因而无法读取请求,然后就会引发此异常。
解决办法
大多数时候,此问题都是由潜在的错误引起的。例如:
该 Web 应用程序与网关建立一个 HTTP 连接,并尝试向它发送一个请求(图 2 中的步骤 2),如清单 6 所示。
清单 6. 向 Web 应用程序发送 HTTP 请求
URL url = new URL(serverAddress);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
PrintWriter writer = new PrintWriter(os);
writer.println("Hello, dude");
writer.flush();
writer.close();
InputStream is = conn.getInputStream();
如果没有最后一行 InputStream is = conn.getInputStream,则会引发 java.net.SocketException: There is no process to read data written to a pipe 异常。如果没有 conn.getInputStream(),则根本不会将请求消息发送到接收端。因此,接收端不会收到任何消息,当然就没有任何进程读取写入连接套接字的请求数据了,所以就导致产生异常。
侦听响应时超时,如图 2 中的步骤4 所示。
性能测试可能预期测试客户端能够在五秒内获得响应。如果响应在五秒后返回,则发出请求的测试客户端将不再处理它。因此,测试客户端不会读取响应数据。对于套接字管道,数据是写入了,但是它缺少读取过程。
响应线程被另一个线程阻塞,如图 2 中的步骤 3 所示。
假设您在网关中管理线程池以响应 Web 应用程序发送的请求。当达到相当高的 TPS 时,由于低效的线程调度,很可能无法调度任何线程去处理新的请求。结果,该请求未由任何线程读取和处理。这还可能会导致错误。
提醒
对于基于输入或输出流的 API,应确保在不再需要时关闭所有打开的连接(打开的 InputStream(Reader) 或 OutputStream(Writer))。
总结
将 Java Web 应用程序从一个平台移植到另一个平台所需的精力虽然不是非常巨大,但也是相当可观的。需要记住的三个要点如下:
在编写操作系统相关的代码时,避免硬编码。使用 java.lang.System.getProtery(String name) 始终更为可靠。
使用 java.lang.Class.getResource(String filename) 来定位在 Application Developer V5.1.2、Rational Application Developer V6.0 和相关版本的 Application Server 上都有效的资源,无论它们是在 Windows 还是在 AIX 上。
对于容易出错的网络程序,应该成对地执行读取和写入操作。如果将数据写入某个套接字,则必须有某个进程去读取它们。
分享到:
相关推荐
该工具提供了便捷的迁移过程,使得用户可以快速地将Web应用程序迁移到新的Web服务器上。 在本手册中,我们将详细介绍东方通Web应用迁移工具的使用方法,并提供了详细的安装指南和使用指南,以便用户能够快速地掌握...
迁移过程中需注意的问题: 1. **文件格式兼容性**:AIX和Windows的文件系统不同,可能需要转换文件格式。 2. **字符集兼容**:检查并确保源数据库和目标数据库的字符集一致。 3. **安全性和权限**:在Windows中重新...
2. **大小端问题**:在不同架构之间迁移时,如从PowerPC、SPARC迁移到x86、FT1500A,需要考虑字节序的影响,特别是在位操作、寄存器操作以及跨平台网络通信中。 3. **C++11的支持**:支持`auto`、`nullptr`等关键字...
在整个迁移过程中,需要注意的是数据的完整性和一致性。在实际操作中,可能还需要考虑其他因素,比如权限设置、用户和角色的迁移、触发器、存储过程、索引、视图等数据库对象。此外,确保目标系统有足够的磁盘空间,...
在迁移过程中,由于VXVM的跨平台兼容性,数据格式无需转换,直接在AIX平台使用。Oracle在AIX上默认从Volume的第一个4KB块之后开始读取,而在HP上则从blk-0开始。为保持一致性,需在AIX上设置Volume的devsubtype为...
除此之外,迁移过程中可能会遇到的问题包括: - 文件路径差异:Windows与Linux的路径表示方式不同,需要检查项目中的所有硬编码路径。 - 文件权限:Linux对文件权限有严格控制,确保所有运行所需的文件都有正确的...
在Java开发过程中,将项目部署到Windows服务器上通常需要配置JDK环境、设置系统路径、配置服务器环境等繁琐步骤。然而,通过特定的技术和工具,我们可以实现Java项目的Windows环境一键部署,大大简化了运维工作。...
但如果涉及不同的操作系统(如从AIX到Linux),则至少需要Oracle 10g数据库版本以处理字节序差异和其他兼容性问题。 4. 字典管理和本地管理的表空间:被传输的表空间可以是字典管理或本地管理的,且自Oracle 9i起,...
在IT行业中,数据库迁移同步是一项重要的任务,尤其是在企业系统升级、多环境数据一致性维护或分布式系统数据整合时。...在实践中,你还需要考虑到数据安全、性能监控和异常处理等方面,确保整个迁移过程的顺利进行。
本文主要讨论了在异构平台之间迁移数据库的过程,特别是从AIX平台迁移到Linux环境下的实践,并且特别强调了使用RMAN工具的重要性。接下来,我将详细阐释文中的关键知识点。 1. 异构平台下传输表空间的实施 在异构...
Oracle数据库的跨平台迁移是一项技术性较强的工作,尤其是从Linux迁移到Windows。在本案例中,用户成功地将一个在Linux环境下运行的Oracle 10g数据库移植到了Windows操作系统上。以下是对这个过程的详细解释和扩展:...
- **系统迁移**:将现有系统从旧平台迁移到新平台,可能涉及物理到虚拟化环境的变化。 - **应用程序迁移**:迁移完成后,需重新安装并配置应用程序。 - **验证测试**:迁移完成后进行全面的功能验证测试,确保一切...
"一种从AIX平台至K-UX平台的CC++应用迁移工具.pdf"可能是该迁移过程的指南或手册,它可能包含以下内容: 1. **源代码分析**:迁移工具通常会分析AIX上的CC++应用源代码,识别特定于AIX的API、库函数和系统调用,并...
同时,确保所有系统都安装了最新的安全补丁,以降低在迁移过程中受到攻击的风险。 1. **硬件要求** - CPU:至少双核64位处理器,推荐更高级别以支持新功能。 - 内存:根据角色和服务,最小4GB,建议16GB或以上。...
在进行LV镜像和迁移前,至关重要的是要做好数据备份工作,以防止在迁移过程中出现数据丢失的风险。此外,为了尽量减少对业务的影响,应选择在业务量较小的时间窗口进行操作,并且在迁移前后停止相关的应用操作,以...
10. **环境模拟**:这种互导过程在项目管理中很重要,尤其是在开发和测试环境中,当生产环境是小机(如AIX),而测试环境是Windows时,数据的同步对于确保软件质量至关重要。 综上所述,AIX和Windows之间的DB2...
- **物理迁移**:若从旧硬件迁移到新硬件,可能需要重新安装系统,再恢复备份的数据。 - **虚拟化迁移**:使用虚拟化技术如PowerVM,可以实现无中断的系统迁移。 ##### 4. **数据与配置恢复** - 将备份的数据...
- **评估迁移需求**: 确定迁移的目标平台(例如从较旧版本迁移到 AIX 7.1),评估现有应用程序的兼容性。 - **规划迁移步骤**: 根据评估结果制定详细的迁移计划,包括迁移时间表、测试计划等。 - **执行迁移**: 使用...