summaryrefslogtreecommitdiffstats
path: root/doc/rados/troubleshooting/memory-profiling.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rados/troubleshooting/memory-profiling.rst')
-rw-r--r--doc/rados/troubleshooting/memory-profiling.rst156
1 files changed, 94 insertions, 62 deletions
diff --git a/doc/rados/troubleshooting/memory-profiling.rst b/doc/rados/troubleshooting/memory-profiling.rst
index 85146653b4a..8e58f2d76fb 100644
--- a/doc/rados/troubleshooting/memory-profiling.rst
+++ b/doc/rados/troubleshooting/memory-profiling.rst
@@ -2,16 +2,23 @@
Memory Profiling
==================
-Ceph MON, OSD and MDS can generate heap profiles using
-``tcmalloc``. To generate heap profiles, ensure you have
-``google-perftools`` installed::
+Ceph Monitor, OSD, and MDS can report ``TCMalloc`` heap profiles. Install
+``google-perftools`` if you want to generate these. Your OS distribution might
+package this under a different name (for example, ``gperftools``), and your OS
+distribution might use a different package manager. Run a command similar to
+this one to install ``google-perftools``:
- sudo apt-get install google-perftools
+.. prompt:: bash
-The profiler dumps output to your ``log file`` directory (i.e.,
-``/var/log/ceph``). See `Logging and Debugging`_ for details.
-To view the profiler logs with Google's performance tools, execute the
-following::
+ sudo apt-get install google-perftools
+
+The profiler dumps output to your ``log file`` directory (``/var/log/ceph``).
+See `Logging and Debugging`_ for details.
+
+To view the profiler logs with Google's performance tools, run the following
+command:
+
+.. prompt:: bash
google-pprof --text {path-to-daemon} {log-path/filename}
@@ -48,9 +55,9 @@ For example::
0.0 0.4% 99.2% 0.0 0.6% decode_message
...
-Another heap dump on the same daemon will add another file. It is
-convenient to compare to a previous heap dump to show what has grown
-in the interval. For instance::
+Performing another heap dump on the same daemon creates another file. It is
+convenient to compare the new file to a file created by a previous heap dump to
+show what has grown in the interval. For example::
$ google-pprof --text --base out/osd.0.profile.0001.heap \
ceph-osd out/osd.0.profile.0003.heap
@@ -60,112 +67,137 @@ in the interval. For instance::
0.0 0.9% 97.7% 0.0 26.1% ReplicatedPG::do_op
0.0 0.8% 98.5% 0.0 0.8% __gnu_cxx::new_allocator::allocate
-Refer to `Google Heap Profiler`_ for additional details.
+See `Google Heap Profiler`_ for additional details.
+
+After you have installed the heap profiler, start your cluster and begin using
+the heap profiler. You can enable or disable the heap profiler at runtime, or
+ensure that it runs continuously. When running commands based on the examples
+that follow, do the following:
-Once you have the heap profiler installed, start your cluster and
-begin using the heap profiler. You may enable or disable the heap
-profiler at runtime, or ensure that it runs continuously. For the
-following commandline usage, replace ``{daemon-type}`` with ``mon``,
-``osd`` or ``mds``, and replace ``{daemon-id}`` with the OSD number or
-the MON or MDS id.
+#. replace ``{daemon-type}`` with ``mon``, ``osd`` or ``mds``
+#. replace ``{daemon-id}`` with the OSD number or the MON ID or the MDS ID
Starting the Profiler
---------------------
-To start the heap profiler, execute the following::
+To start the heap profiler, run a command of the following form:
- ceph tell {daemon-type}.{daemon-id} heap start_profiler
+.. prompt:: bash
-For example::
+ ceph tell {daemon-type}.{daemon-id} heap start_profiler
- ceph tell osd.1 heap start_profiler
+For example:
-Alternatively the profile can be started when the daemon starts
-running if the ``CEPH_HEAP_PROFILER_INIT=true`` variable is found in
-the environment.
+.. prompt:: bash
+
+ ceph tell osd.1 heap start_profiler
+
+Alternatively, if the ``CEPH_HEAP_PROFILER_INIT=true`` variable is found in the
+environment, the profile will be started when the daemon starts running.
Printing Stats
--------------
-To print out statistics, execute the following::
+To print out statistics, run a command of the following form:
+
+.. prompt:: bash
+
+ ceph tell {daemon-type}.{daemon-id} heap stats
- ceph tell {daemon-type}.{daemon-id} heap stats
+For example:
-For example::
+.. prompt:: bash
- ceph tell osd.0 heap stats
+ ceph tell osd.0 heap stats
-.. note:: Printing stats does not require the profiler to be running and does
- not dump the heap allocation information to a file.
+.. note:: The reporting of stats with this command does not require the
+ profiler to be running and does not dump the heap allocation information to
+ a file.
Dumping Heap Information
------------------------
-To dump heap information, execute the following::
+To dump heap information, run a command of the following form:
- ceph tell {daemon-type}.{daemon-id} heap dump
+.. prompt:: bash
-For example::
+ ceph tell {daemon-type}.{daemon-id} heap dump
- ceph tell mds.a heap dump
+For example:
-.. note:: Dumping heap information only works when the profiler is running.
+.. prompt:: bash
+
+ ceph tell mds.a heap dump
+
+.. note:: Dumping heap information works only when the profiler is running.
Releasing Memory
----------------
-To release memory that ``tcmalloc`` has allocated but which is not being used by
-the Ceph daemon itself, execute the following::
+To release memory that ``tcmalloc`` has allocated but which is not being used
+by the Ceph daemon itself, run a command of the following form:
+
+.. prompt:: bash
+
+ ceph tell {daemon-type}{daemon-id} heap release
- ceph tell {daemon-type}{daemon-id} heap release
+For example:
-For example::
+.. prompt:: bash
- ceph tell osd.2 heap release
+ ceph tell osd.2 heap release
Stopping the Profiler
---------------------
-To stop the heap profiler, execute the following::
+To stop the heap profiler, run a command of the following form:
- ceph tell {daemon-type}.{daemon-id} heap stop_profiler
+.. prompt:: bash
-For example::
+ ceph tell {daemon-type}.{daemon-id} heap stop_profiler
- ceph tell osd.0 heap stop_profiler
+For example:
+
+.. prompt:: bash
+
+ ceph tell osd.0 heap stop_profiler
.. _Logging and Debugging: ../log-and-debug
.. _Google Heap Profiler: http://goog-perftools.sourceforge.net/doc/heap_profiler.html
-Alternative ways for memory profiling
--------------------------------------
+Alternative Methods of Memory Profiling
+----------------------------------------
Running Massif heap profiler with Valgrind
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-The Massif heap profiler tool can be used with Valgrind to
-measure how much heap memory is used and is good for
-troubleshooting for example Ceph RadosGW.
+The Massif heap profiler tool can be used with Valgrind to measure how much
+heap memory is used. This method is well-suited to troubleshooting RadosGW.
+
+See the `Massif documentation
+<https://valgrind.org/docs/manual/ms-manual.html>`_ for more information.
+
+Install Valgrind from the package manager for your distribution then start the
+Ceph daemon you want to troubleshoot:
-See the `Massif documentation <https://valgrind.org/docs/manual/ms-manual.html>`_ for
-more information.
+.. prompt:: bash
-Install Valgrind from the package manager for your distribution
-then start the Ceph daemon you want to troubleshoot::
+ sudo -u ceph valgrind --max-threads=1024 --tool=massif /usr/bin/radosgw -f --cluster ceph --name NAME --setuser ceph --setgroup ceph
- sudo -u ceph valgrind --max-threads=1024 --tool=massif /usr/bin/radosgw -f --cluster ceph --name NAME --setuser ceph --setgroup ceph
+When this command has completed its run, a file with a name of the form
+``massif.out.<pid>`` will be saved in your current working directory. To run
+the command above, the user who runs it must have write permissions in the
+current directory.
-A file similar to ``massif.out.<pid>`` will be saved when it exits
-in your current working directory. The user running the process above
-must have write permissions in the current directory.
+Run the ``ms_print`` command to get a graph and statistics from the collected
+data in the ``massif.out.<pid>`` file:
-You can then run the ``ms_print`` command to get a graph and statistics
-from the collected data in the ``massif.out.<pid>`` file::
+.. prompt:: bash
- ms_print massif.out.12345
+ ms_print massif.out.12345
-This output is great for inclusion in a bug report.
+The output of this command is helpful when submitting a bug report.