no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


linux_memory_and_processes [2012/02/08 20:31] (current) – created - external edit 127.0.0.1
Line 1: Line 1:
 +====== Linux Memory and Processes ======
 +
 +  * [[Apache Tuning]]
 +  * [[htop]]
 +
 +  * [[http://rimuhosting.com/howto/memory.jsp|Troubleshooting memory usage]]
 +
 +Use ''free'' to determine how much memory is being used, and how much is available.
 +
 +Display memory usage in MB:
 +
 +<code>
 +free -m
 +</code>
 +
 +Sample output:
 +
 +<code>
 +             total       used       free     shared    buffers     cached
 +Mem:          3952       3849        103          0       1917        574
 +-/+ buffers/cache:       1357       2595
 +Swap:          517        256        261
 +</code>
 +
 +The total memory available to the OS is the ''total'' column in the ''Mem'' row: 3952 MB.
 +
 +The top row ''used'' (3849) value will almost always nearly match the top row ''mem'' value (3952).  Since Linux likes to use any spare memory to cache disk blocks (574).
 +
 +The actual memory being used is in the ''-/+ buffers/cache'' row.  The ''used'' value (1357) plus the ''free'' value (2595) will equal the total memory available to the OS (3952).
 +
 +Determining swap usage is the same as before.  The total swap available to the OS is in the ''total'' value (517), 256 MB is being used and 261 MB are still available.
 +
 +=== Finding how much memory a process is using ===
 +
 +This is especially helpful for tuning system daemons that can modify their memory usage, such as MySQL and Apache.  We'll need to use ps as well as a few pipes to find the amounts we are looking for.
 +
 +First, display just the processes for one program, and sort them by memory usage (rss) in order from lowest to highest thread.  In this case, we'll use httpd:
 +
 +<code>
 +ps a -ylC httpd --sort rss
 +</code>
 +
 +Next, we only need the RSS column:
 +
 +<code>
 +ps a -ylC httpd --sort rss | awk '{print $8'}
 +</code>
 +
 +This still displays the memory usage for all the processes, and in the case of Apache, all the threads.  We want to determine the maximum memory used out of all of them, so just return the last line:
 +
 +<code>
 +ps a -ylC httpd --sort rss | awk '{print $8'} | tail -n 1
 +</code>
 +
 +An example output would be ''22596'' You can verify this number by running htop, displaying only the processes for user apache, and sorting by resident memory:
 +
 +<code>
 +htop -u apache --sort-key M_RESIDENT
 +</code>
 +
 +Or, you can use top, though it is not sorted.  Look at the RES column:
 +
 +<code>
 +top -u apache -n 1
 +</code>
 +
 +Divide that number by 1024 to determine the amount of memory used in MB.
 +
 +<code>
 +echo 22596/1024 | bc
 +22
 +</code>
 +
 +So, the thread using the most memory is taking 22 MB.
 +
 +
 +
  

Navigation
QR Code
QR Code linux_memory_and_processes (generated for current page)