Tomcat与Azure中的MongoDB对话导致超时错误

戴夫·弗罗奈(Dave Vronay)

我的系统是在Ubuntu上运行的TomCat 7服务器,与在CentOS中运行的MongoDB集群通信。我们在AWS上拥有它,并且工作正常。

我最近在Azure上提出了完全相同的东西,当tomcat应用程序尝试查询MongoDB时,我们遇到了恒定的,看似随机的超时。一个典型的错误是:

Jan 31 08:13:54 catalina.out:  Jan 31, 2014 4:14:09 PM com.mongodb.DBPortPool gotError
Jan 31 08:13:54 catalina.out:  WARNING: emptying DBPortPool to xxx.cloudapp.net/xxx.xxx.xxx.xxx:21191 b/c of error
Jan 31 08:13:54 catalina.out:  java.net.SocketException: Connection timed out
Jan 31 08:13:54 catalina.out:   at java.net.SocketInputStream.socketRead0(Native Method)
Jan 31 08:13:54 catalina.out:   at java.net.SocketInputStream.read(SocketInputStream.java:146)
Jan 31 08:13:54 catalina.out:   at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
Jan 31 08:13:54 catalina.out:   at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
Jan 31 08:13:54 catalina.out:   at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
Jan 31 08:13:54 catalina.out:   at org.bson.io.Bits.readFully(Bits.java:46)
Jan 31 08:13:54 catalina.out:   at org.bson.io.Bits.readFully(Bits.java:33)
Jan 31 08:13:54 catalina.out:   at org.bson.io.Bits.readFully(Bits.java:28)
Jan 31 08:13:54 catalina.out:   at com.mongodb.Response.<init>(Response.java:40)
Jan 31 08:13:54 catalina.out:   at com.mongodb.DBPort.go(DBPort.java:142)
Jan 31 08:13:54 catalina.out:   at com.mongodb.DBPort.call(DBPort.java:92)
Jan 31 08:13:54 catalina.out:   at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:244)
Jan 31 08:13:54 catalina.out:   at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216)
Jan 31 08:13:54 catalina.out:   at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:288)
Jan 31 08:13:54 catalina.out:   at com.mongodb.DB.command(DB.java:262)
Jan 31 08:13:54 catalina.out:   at com.mongodb.DB.command(DB.java:244)
Jan 31 08:13:54 catalina.out:   at com.mongodb.DBCollection.getCount(DBCollection.java:985)
Jan 31 08:13:54 catalina.out:   at com.mongodb.DBCollection.getCount(DBCollection.java:956)
Jan 31 08:13:54 catalina.out:   at com.mongodb.DBCollection.getCount(DBCollection.java:931)
Jan 31 08:13:54 catalina.out:   at com.mongodb.DBCollection.count(DBCollection.java:878)
Jan 31 08:13:54 catalina.out:   at com.eweware.service.base.store.impl.mongo.dao.BaseDAOImpl._exists(BaseDAOImpl.java:788)
Jan 31 08:13:54 catalina.out:   at com.eweware.service.base.store.impl.mongo.dao.GroupDAOImpl._exists(GroupDAOImpl.java:18)

我正在使用Java驱动程序2.11.4并将其初始化如下:

        builder.autoConnectRetry(true)
                .connectionsPerHost(10)
                .writeConcern(WriteConcern.FSYNCED)
                .connectTimeout(30000)
                .socketKeepAlive(true);

在阅读有关Internet的文章时,我看到一些材料表明存在Azure问题和一些C#建议,但是我还没有看到有关如何从Java进行更正的任何信息。

更多细节:

  1. 当MongoDB是单个节点或副本集时,会发生这种情况
  2. 无论服务器是否处于负载状态,都会发生这种情况。实际上,服务器在某些负载下的性能似乎要比冷启动更好。但是即使在恒定负载下,它也会超时
  3. 超时似乎是随机的,因为什么呼叫失败或何时失败没有明显的模式。有时会花一个小时没问题,其他时候每次通话都会失败
  4. 如果我在发生超时错误时重试呼叫,则最终它将起作用。有时需要> 100次重试,而其他时候只需一次即可。

这是我正在尝试的重试代码:

private DBObject findOneRetry(DBObject criteria, DBObject fields, DBCollection collection) throws SystemErrorException {
    DBObject obj = null;
    for (int attempt = 1; attempt < MAX_RETRIES; attempt++) {
        try {
            obj = collection.findOne(criteria, fields);  // getting SocketException inside here
            return obj;
        } catch (Exception e) {
            if (attempt > MAX_RETRIES) {
                throw new SystemErrorException(makeErrorMessage("findOneRetry", "find", attempt, e, null), e, ErrorCodes.SERVER_DB_ERROR);
            } else {
                logger.warning(getClass().getName() + ": findOneRetry failed and will retry in attempt #" + attempt + " in collection " + _getCollection());
            }
        }
    }
    return obj;
}

关于如何更正的任何建议?

提前致谢!

雷扎

这是由于CentOS服务器中的tcp_keepalive_time高。

在您的MongoS服务器中:sudo nano / proc / sys / net / ipv4 / tcp_keepalive_time将7200更改为60

重新启动您的Azure实例。

更新:为了确保您的VM始终具有tcp_keepalive_time的值:

添加此行:

bash -c 'echo 60 > /proc/sys/net/ipv4/tcp_keepalive_time'

至:

/etc/rc.d/rc.local

更新到更新:对于大多数Linux版本,都有一个/etc/sysctl.d/目录。创建一个文件,例如mongo.conf包含:

net.ipv4.tcp_keepalive_time = 60

将文件放在该目录中并运行:

sysctl -p /etc/sysctl.d/mongo.conf

使用以下命令验证更改:

sysctl net.ipv4.tcp_keepalive_time

在我遇到的基于RedHat和基于Debian的系统中,这将在重新启动后继续存在。您需要确定并检查/etc/sysctl.conf其中的所有其他文件,/etc/sysctl.d以查看变量是否已设置为其他值并进行适当的更改。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Tomcat与Azure中的MongoDB对话导致超时错误

来自分类Dev

由于Spring源中的超时导致Tomcat启动失败

来自分类Dev

由于Spring源中的超时而导致Tomcat启动失败

来自分类Dev

JMeter中的JMS点对点请求超时不会导致错误

来自分类Dev

对话框中的数据表导致错误的宽度

来自分类Dev

实体框架导致超时错误

来自分类Dev

“请求超时” H12 Heroku错误导致访问MongoDB Atlas

来自分类Dev

Mongodb 抛出“连接超时”错误

来自分类Dev

在VS Code中调试dockerized Django会导致错误“超时,等待启动器连接”

来自分类Dev

导致rails app的public / packs中的application.js文件过大?/机架超时错误

来自分类Dev

导入json文件到mongodb中不带'['会导致错误

来自分类Dev

由于SSIS中的多个JOIN导致超时

来自分类Dev

MySQL中的“START TRANSACTION”导致连接超时

来自分类Dev

在MVC5 / EF 6中使用codefirststoredprocs导致超时问题。从已存储的proc dbo中读取错误。[...]:超时已过期

来自分类Dev

与Azure VM上的MongoDb的连接超时

来自分类Dev

在python中检查超时错误

来自分类Dev

AWS Lex 中的超时错误

来自分类Dev

SQL Azure-频繁超时错误

来自分类Dev

Bash使用超时将输出写入文件会导致错误

来自分类Dev

chutzpah的代码覆盖率导致超时错误

来自分类Dev

在aspx中使用ashx上传文件会导致超时错误

来自分类Dev

TWILIO:使用“ evaluateWorkerAttributes”过滤TaskQueues导致超时错误

来自分类Dev

chutzpah的代码覆盖率导致超时错误

来自分类Dev

Bash使用超时将输出写入文件会导致错误

来自分类Dev

查询时间长导致504超时错误?

来自分类Dev

其他路径组件中的“渲染超时”对话框

来自分类Dev

在 Azure Web 作业中调用的 Azure SQL 数据库上有时会发生超时错误

来自分类Dev

在mongoDB中索引数组/子对象会导致重复的键错误

来自分类Dev

在Azure中请求Web API请求超时

Related 相关文章

  1. 1

    Tomcat与Azure中的MongoDB对话导致超时错误

  2. 2

    由于Spring源中的超时导致Tomcat启动失败

  3. 3

    由于Spring源中的超时而导致Tomcat启动失败

  4. 4

    JMeter中的JMS点对点请求超时不会导致错误

  5. 5

    对话框中的数据表导致错误的宽度

  6. 6

    实体框架导致超时错误

  7. 7

    “请求超时” H12 Heroku错误导致访问MongoDB Atlas

  8. 8

    Mongodb 抛出“连接超时”错误

  9. 9

    在VS Code中调试dockerized Django会导致错误“超时,等待启动器连接”

  10. 10

    导致rails app的public / packs中的application.js文件过大?/机架超时错误

  11. 11

    导入json文件到mongodb中不带'['会导致错误

  12. 12

    由于SSIS中的多个JOIN导致超时

  13. 13

    MySQL中的“START TRANSACTION”导致连接超时

  14. 14

    在MVC5 / EF 6中使用codefirststoredprocs导致超时问题。从已存储的proc dbo中读取错误。[...]:超时已过期

  15. 15

    与Azure VM上的MongoDb的连接超时

  16. 16

    在python中检查超时错误

  17. 17

    AWS Lex 中的超时错误

  18. 18

    SQL Azure-频繁超时错误

  19. 19

    Bash使用超时将输出写入文件会导致错误

  20. 20

    chutzpah的代码覆盖率导致超时错误

  21. 21

    在aspx中使用ashx上传文件会导致超时错误

  22. 22

    TWILIO:使用“ evaluateWorkerAttributes”过滤TaskQueues导致超时错误

  23. 23

    chutzpah的代码覆盖率导致超时错误

  24. 24

    Bash使用超时将输出写入文件会导致错误

  25. 25

    查询时间长导致504超时错误?

  26. 26

    其他路径组件中的“渲染超时”对话框

  27. 27

    在 Azure Web 作业中调用的 Azure SQL 数据库上有时会发生超时错误

  28. 28

    在mongoDB中索引数组/子对象会导致重复的键错误

  29. 29

    在Azure中请求Web API请求超时

热门标签

归档