我如何才能看到mongo正在从mongo shell中侦听哪些端口?

时间:2012-02-19 03:23:19

标签: mongodb

如果我有一个mongo实例正在运行,我如何检查它从shell中侦听的端口号?我认为db.serverStatus()会这样做,但我没有看到它。我看到了这个

"connections" : {
    "current" : 3,
    "available" : 816

哪个很接近......但没有。建议?我已经阅读了文档,似乎无法找到任何可以执行此操作的命令。

6 个答案:

答案 0 :(得分:212)

您可以通过运行以下命令从操作系统shell执行此操作:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo

答案 1 :(得分:66)

在系统shell中,您可以使用lsof(请参阅下面的Derick答案)或netstat -an来查看进程实际执行的操作。但是,假设您只能访问mongo shell(问题标题所暗示的),那么您可以运行serverCmdLineOpts()命令。该输出将为您提供在命令行(argv)上传递的所有参数以及来自配置文件(已解析)的参数,您可以根据该信息推断端口mongod正在侦听。这是一个例子:

db.serverCmdLineOpts()
{
    "argv" : [
        "./mongod",
        "-replSet",
        "test",
        "--rest",
        "--dbpath",
        "/data/test/r1",
        "--port",
        "30001"
    ],
    "parsed" : {
        "dbpath" : "/data/test/r1",
        "port" : 30001,
        "replSet" : "test",
        "rest" : true
    },
    "ok" : 1
}

如果您没有通过上述特定端口选项,则默认情况下mongod将在27017和28017(http console)上进行侦听。注意:还有一些其他参数可以在不明确的情况下更改端口,请参见此处:

https://docs.mongodb.org/manual/reference/configuration-options/#sharding.clusterRole

答案 2 :(得分:26)

试试这个:

db.runCommand({whatsmyuri : 1})

它将显示IP地址和端口号。

答案 3 :(得分:10)

MongoDB默认只侦听一个端口(27017)。如果--rest接口处于活动状态,则端口28017(27017 + 1000)也将打开处理Web请求以获取详细信息。

MongoDB支持getParameter命令,但只有在您已经连接到数据库(此时您已经知道该端口)时才能使用。

答案 4 :(得分:3)

你可以试试,从 mongo shell:

  • db.getMongo()
<块引用>

使用这个命令测试mongo shell是否有连接到 正确的数据库实例。

connection to <IP>:<PORT>
  • db.collection.explain()
<块引用>

对于未分片的集合,explain 返回以下 serverInfo MongoDB 实例的信息:

"serverInfo" : {
   "host" : <string>,
   "port" : <int>,
   "version" : <string>,
   "gitVersion" : <string>
}

varying truncating characters of UILabel

答案 5 :(得分:1)

尝试以下命令,这对我有用:

sudo lsof -iTCP -sTCP:LISTEN | grep mongo