【问题标题】:WSO2 Enterprise integrator (ESB) stuck every weekWSO2 企业集成商 (ESB) 每周卡住
【发布时间】:2020-06-23 04:46:39
【问题描述】:

我正在使用 WSO2 Enterprise integrator (ESB) V6.3.0 将文件从一个 FTP 服务器移动到另一个。 每天午夜需要移动大约 10 个非常小的文件。

但我发现,EI 在移动文件时不知何故卡在了某个地方,并停止了其余的操作,尽管它仍处于运行状态。我必须每周在 PROD 上重新启动 EI,这不是一个好兆头。

如果有任何配置设置或任何其他可以解决此问题的东西,请提出建议。

附加以下示例代理服务之一

 <?xml version="1.0" encoding="UTF-8"?>
<proxy name="SFTPFileTransferProxy" startOnLoad="true"
  trace="disable" transports="vfs" xmlns="http://ws.apache.org/ns/synapse">
  <target>
    <inSequence>
      <property expression="$trp:FILE_NAME" name="FILE_NAME"
        scope="default" type="STRING"/>
      <log level="custom">
        <property name="sequence" value="File transfer Proxy"/>
        <property expression="$ctx:FILE_NAME" name="FL2"/>
      </log>
    </inSequence>
    <outSequence/>
    <faultSequence/>
  </target>
  <parameter name="transport.PollInterval">300</parameter>
  <parameter name="transport.vfs.FileURI">vfs:sftp://server_name/out/xyz?transport.vfs.AvoidPermissionCheck=true</parameter>
  <parameter name="transport.vfs.ContentType">text/plain</parameter>
  <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
  <parameter name="transport.vfs.MoveAfterFailure">file:///C:/files/failed/xyz_in</parameter>
  <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
  <parameter name="transport.vfs.Locking">disable</parameter>
  <parameter name="transport.vfs.FileNamePattern">.*\.csv</parameter>
  <parameter name="transport.vfs.MoveAfterProcess">smb://server_in/files/xyz_in</parameter>
</proxy>

将来自服务器的线程转储附加到 github 目录。

https://github.com/gadginir/wso2-esb

【问题讨论】:

    标签: wso2 wso2esb wso2carbon wso2ei


    【解决方案1】:

    您需要确定导致 ESB 卡住的原因。线程转储将帮助您识别这一点。请在 ESB 节点 [1] 中捕获多个线程转储,并检查线程是否持续卡住。

    如果出现错误“java.lang.OutOfMemoryError:GC 开销限制超出”,请检查 carbon.log 文件。这表明服务器是否已进入内存不足状态。如果存在,它将在日志目录中创建一个堆转储,分析堆转储会让您知道问题的可能原因。

    [1]-https://docs.wso2.com/display/CLUSTER420/Troubleshooting+in+Production+Environments

    更新

    我分析了提供的线程转储 (29072020_1.txt),我可以观察到 vfs-Worker-9 已锁定资源 0x00000006c5842030,它似乎卡在了 在 Session 上循环。有几个 VFS 线程等待锁定资源 0x00000006c5842030,因此它们被阻塞了。

    vfs-Worker-9" #228 prio=5 os_prio=0 tid=0x000000002344f000 nid=0x1494 waiting on condition [0x0000000034eae000]
       java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at com.jcraft.jsch.Session.write(Session.java:1260)
        at com.jcraft.jsch.ChannelSftp.sendPacketPath(ChannelSftp.java:2602)
        at com.jcraft.jsch.ChannelSftp.sendPacketPath(ChannelSftp.java:2586)
        at com.jcraft.jsch.ChannelSftp.sendSTAT(ChannelSftp.java:2506)
        at com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:2213)
        at com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:2242)
        at com.jcraft.jsch.ChannelSftp.stat(ChannelSftp.java:2199)
        at org.apache.commons.vfs2.provider.sftp.SftpFileObject.statSelf(SftpFileObject.java:127)
        at org.apache.commons.vfs2.provider.sftp.SftpFileObject.doGetType(SftpFileObject.java:95)
        at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:1285)
        - locked <0x00000006c5842030> (a org.apache.commons.vfs2.provider.sftp.SftpFileSystem)
        at org.apache.commons.vfs2.provider.sftp.SftpFileObject.refresh(SftpFileObject.java:79)
        at org.apache.commons.vfs2.provider.AbstractFileSystem.resolveFile(AbstractFileSystem.java:337)
        - locked <0x00000006c5842030> (a org.apache.commons.vfs2.provider.sftp.SftpFileSystem)
    

    更新 2 您可以尝试如下修改 vfs 连接 URL。这里我们添加了 vfs.passive=true [2]。

    vfs:sftp://server_name/out/xyz?transport.vfs.AvoidPermissionCheck=true&amp;vfs.passive=true
    

    [2]-https://docs.wso2.com/display/EI650/VFS+Transport

    【讨论】:

    • 我拿了 jstack 线程转储。在上面的问题中更新。没有 OutOfMemory 的迹象。似乎线程不断卡住。如何解决。
    • 如果您需要确定哪些线程持续卡住,您需要捕获多个线程转储。您可以使用 jstack 命令手动执行此操作,也可以使用脚本 gist.github.com/bsenduran/02e8bf024fcaaa7707a6bb2321e097a8
    • 请确保您在捕获线程转储时使用的是 WSO2 服务器的 PID。您可以使用命令“ps -ef | grep wso2”来获取PID
    • 谢谢尚卡。我使用了正确的 PID 来捕获线程转储。我还尝试捕获它几次,导致相同的输出。
    • 能否在通常的工作场景中也捕获线程转储?因为在 EI 工作场景中需要存在的线程在此线程转储中不可用。您是否将 EI 服务器作为 Windows 服务启动
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多