auf einem großen 12 Kerner
Wie viele Kerne kann dein Anwendungsfall ausnutzen? Läuft auf dem Server noch was anderes?
und nutz aktuell nur 22 MB Ram
Wie viele Daten sind in der DB? Das muss man in Relation sehen. Wenn ja jetzt nur ein paar MB Daten drin sind, dann ist die RAM-Nutzung nicht weiter ungewöhnlich.
Läuft auf dem Server noch was anderes?
"MongoDB automatically uses all free memory on the machine as its cache." [1]
MongoDB sollte sich den gesamten Speicher als Cache gönnen, gibt diesen allerdings frei, wenn andere Prozesse den Speicher benötigen.
bei einer relativ hohen CPU Last.
Ist die Last von DB-Prozessen oder eher I/O-Wait?
Sieht so aus als würde sie nichts cachen.
Wenn caching das Problem ist, dann solltest du viel I/O-Wait sehen.
MongoDB ist eigentlich sehr anspruchslos, was die Konfiguration angeht und macht das meiste intern per Default. Das sieht man sehr schön hieran:
"MongoDB has no configurable cache. MongoDB uses all free memory on the system automatically by way of memory-mapped files. Operating systems use the same approach with their file system caches." [1]
Die wichtigste Frage ist also: Was läuft sonst noch auf dem Server? Teilt sich die MongoDB die Kiste mit vielen anderen Prozessen, wäre eine Überlegung, die MongoDB auf separate Server auszulagern.
Gleich danach kommt die Frage nach konkurrierenden Zugriffen und dem Anteil an schreibenden Zugriffen. Wenn da viel Konkurrenz ist und ein hoher Write-Anteil, könnte es sich lohnen ein ReplicaSet einzurichten und die Clients Reads bevorzugt an Slave(s) zu schicken.
[1]
http://docs.mongodb.org/manual/faq/fundamentals/