OS版本:centos6.8
使用的数据引擎:wiredtigger
Mongodb部署方式:Repl(一主两从)
硬件:64核,512G内存
数据库大小:150G,索引大小:60G
现像:
Mongodb主表现正常,没有任务异常的日志,
Mongodb另一从也表现正常,日志里没有异常记录,但是另一从在日志里出现大量的:serverStatus was very slow,是的,是大量。
连上对应的Mongodb服务器,首先排除了内存,CPU及IO的问题
因为内存有大量剩余,CPU只用到2%,IO读写没有任务压力!这就有点晕圈了,怎么回事呀!
日志如下:
2018-07-30T13:54:14.883+0800 I COMMAND [conn1] serverStatus was very slow: { after basic: 0, after advisoryHostFQDNs: 10016, after asserts: 10016, after backgroundFlushing: 10016, after connections: 10016, after dur: 10016, after extra_info: 10016, after globalLock: 10016, after network: 10016, after opLatencies: 10016, after opcounters: 10016, after opcountersRepl: 10016, after repl: 10016, after security: 10016, after sharding: 10016, after storageEngine: 10016, after tcmalloc: 10016, after wiredTiger: 10016, at end: 10016 }
2018-07-30T13:54:14.883+0800 I COMMAND [conn1] command admin.$cmd command: serverStatus { serverStatus: 1, advisoryHostFQDNs: 1, locks: 0, recordStats: 0, oplog: 0 } numYields:0 reslen:22917 locks:{} protocol:op_query 10016ms
......
还有一点,就是好像对业务的查询影响不是很大(影响是一定有的,只不过这个从分流的业务不是很多,所以业务没有很明显影响,但是不解决的话,说不定那天GG了),问题必须解决!
对比了主从的启动命令,发现三台服务器启动Mongodb的命令是一模一样的。
那会不会是网络原因呢,查看监控,发现三台服务器的数据与曲线也基本上差不多!
好吧,再回来看仔细看日志吧
{ after basic: 0, after advisoryHostFQDNs: 10016, after asserts: 10016, after backgroundFlushing: 10016, after connections: 10016, after dur: 10016, after extra_info: 10016, after globalLock: 10016, after network: 10016, after opLatencies: 10016, after opcounters: 10016, after opcountersRepl: 10016, after repl: 10016, after security: 10016, after sharding: 10016, after storageEngine: 10016, after tcmalloc: 10016, after wiredTiger: 10016, at end: 10016 }
注意到一点:after advisoryHostFQDNs: 10016 是不是说在这一点就花了10016MS呀,好像有点戏呀
看看什么是advisoryHostFQDNs,官网解释:new in version 3.2 "An array of the system’s fully qualified domain names (FQDNs)"
FQDNs:fully qualified domain names
这跟域名有关,好像问题原因就在这里
使用hostname -f 查看本机的全域名,结果:
hostname: Host name lookup failure
那我在/etc/hosts里设置一下不就可以了?
动手修改/etc/hosts 增加本机的IP的域名,然后强制加载一下:hostname -F /etc/hosts,再使用hostname -f 查看本机的全域名,正常显示!
再看Mongodb的日志,再也没有serverStatus was very slow之类的日志,问题解决
另附带一问题:
在这台有问题机器上使用lsof时也出奇的慢,这个跟DNS有关,可以使用lsof -n解决这个问题!