-
Type: Bug
-
Resolution: Fixed
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: Catalog
-
Fully Compatible
-
ALL
-
Query 2020-02-24, Query 2020-03-09
-
26
Instances of various types of operations, along with information about their durations, are tracked for diagnostic purposes in-memory inside the Top data structure. Users can then access this information via the top command or the $collStats agg stage with the "latencyStats" option.
The code path for creating a new collection records information into Top using the AutoStatsTracker. The AutoStatsTracker's destructor will write an entry into Top by calling Top::record(). The problem is that this destructor will run and add info to Top whether or not the collection creation succeeds. If the collection creation fails, then there will be an entry for a non-existent collection in Top. Worse, attempting to drop this non-existent collection will not clear the extra entry. This could essentially manifest as a memory leak, causing Top's memory footprint to grow over time. This situation can be corrected by restarting the server.
Another possible symptom is that an attempt to run the "top" command could fail with a BSONObjectTooLarge error (or similarly fail when trying to grow a BufBuilder). Until SERVER-6627 is implemented in order to report top data via a cursor, the command will fail when the top diagnostic data exceeds 16MB. Also, data about non-existent collections will erroneously appear in the top command output.
Finally, note that we similar diagnosed and fixed a similar issue in related ticket SERVER-45137.
- is related to
-
SERVER-45137 Increasing memory allocation in Top::record with high rate of collection creates and drops
- Closed
-
SERVER-6627 top command should return cursor
- Backlog