建立Linux进程

时间:2015-04-22 19:07:26

标签: linux mdm

我们正在运行IBM MDM服务器(启动),它通过池机制连接到Oracle DB服务器。池的配置已设置为32.我们还有一个自定义Java进程,它通过MDM服务器公开的API将数据提交到此MDM服务器。一旦我们的自定义java进程(不直接打开任何数据库连接)终止,我们就会发现MDM服务器和Db服务器之间的进程数已经增加到大于32的某个数字。每次每晚运行后,我们看到的数量是进程不断增加,最后达到了Oracle DB(700)设置的限制,数据库不会再打开任何连接,我们的进程在那天晚上失败了。我们试图弄清楚为什么流程不会被终止,为什么它们仍处于ESTABLISHED模式(根据netstat命令)

2 个答案:

答案 0 :(得分:0)

进程数量增加以及ESTABLISHED STATE中的套接字有几个原因。

典型的错误是为每个消息/连接/寄存器生成子进程,而不是重用现有连接。特别是涉及计时器回调

例如,

c - register for timer callback -> server
c -> spawn a process to receive the reply and listen on receive socket
c - register for timer callback -> server -> server
c -> spawn a process to receive the reply and listen on receive socket

而应该是

c - register for timer callback -> server
c -> spawn a process to receive the reply and listen on receive socket
c - set the initialized flag
c - register for timer callback -> server
c -> if initialized do not spawn a process to receive the reply

答案 1 :(得分:0)

系统在达到最大限制后是否会遇到任何异常?

创建的流程是否仍处于活动状态?

这些进程是否建立了数据库连接但未终止?

Top输出显示活动过程吗?

1)清除旧日志。 2)lsof数据。这是一个操作系统命令,它会告诉我们    应用服务器进程正在使用哪些描述符。        lsof -p PID> lsof.out 3)ulimits。这些是操作系统资源限制        ulimit -a> ulimits.out

请检查打开连接的代码在使用后是否已关闭?

检查输出的lsof和连接类型的状态?

我在IBM担任Java服务工程师。请回答上述问题,以便我们更好地帮助您。