aum Posted August 27, 2021 Share Posted August 27, 2021 You may have noticed that sometimes your system consumes too much of memory, which makes your application’s slow or unresponsive. In such a scenario, what do you think would be the best approach to identify the processes that are consuming more memory in a Linux machine? This can be easily identified using the top command and the ps command and we will explain how to use these two commands to identify which processes are eating all the resources on your system. I have used both the commands simultaneously and both gave me the same result in my scenario. I hope some of you have already tried to find this information using one of the below commands. If not, what other commands did you try? I would request you to share with us any other commands that you have tried in the comment section below to help other users. Check out the following article(hyperlink) if you want to find a list of processes that consume most of your CPU resources: How to find out top CPU consumption processes in Linux In this guide, we’ll show you how to check which process is taking more memory in Linux. 1) Find out top memory consuming process in Linux using ‘ps’ command The ‘ps’ command is used to report a snapshot of the current processes. The ‘ps’ command stands for process status. This is a standard Linux application that looks for information about running processes on a Linux system. It is used to list the currently running processes and their process ID’s (PID), process owner name, process priority (PR), and the absolute path of the running command, etc. The below ‘ps’ command check memory usage per process in Linux: # ps aux --sort -rss | head USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND mysql 1064 3.2 5.4 886076 209988 ? Ssl Oct25 62:40 /usr/sbin/mysqld varnish 23396 0.0 2.9 286492 115616 ? SLl Oct25 0:42 /usr/sbin/varnishd -P /var/run/varnish.pid -f /etc/varnish/default.vcl -a :82 -T 127.0.0.1:6082 -S /etc/varnish/secret -s malloc,256M named 1105 0.0 2.7 311712 108204 ? Ssl Oct25 0:16 /usr/sbin/named -u named -c /etc/named.conf nobody 23377 0.2 2.3 153096 89432 ? S Oct25 4:35 nginx: worker process nobody 23376 0.1 2.1 147096 83316 ? S Oct25 2:18 nginx: worker process root 23375 0.0 1.7 131028 66764 ? Ss Oct25 0:01 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf nobody 23378 0.0 1.6 130988 64592 ? S Oct25 0:00 nginx: cache manager process root 1135 0.0 0.9 86708 37572 ? S 05:37 0:20 cwpsrv: worker process root 1133 0.0 0.9 86708 37544 ? S 05:37 0:05 cwpsrv: worker process Use the below ‘ps’ command format to include a specific information about such processes in the output: # ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%mem | head PID PPID %MEM %CPU CMD 1064 1 5.4 3.2 /usr/sbin/mysqld 23396 23386 2.9 0.0 /usr/sbin/varnishd -P /var/run/varnish.pid -f /etc/varnish/default.vcl -a :82 -T 127.0.0.1:6082 -S /etc/varnish/secret -s malloc,256M 1105 1 2.7 0.0 /usr/sbin/named -u named -c /etc/named.conf 23377 23375 2.3 0.2 nginx: worker process 23376 23375 2.1 0.1 nginx: worker process 3625 977 1.9 0.0 /usr/local/bin/php-cgi /home/daygeekc/public_html/index.php 23375 1 1.7 0.0 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 23378 23375 1.6 0.0 nginx: cache manager process 1135 3034 0.9 0.0 cwpsrv: worker process If you want to see only the command name instead of the absolute path of the command, use the following ‘ps’ command format: # ps -eo pid,ppid,%mem,%cpu,comm --sort=-%mem | head PID PPID %MEM %CPU COMMAND 1064 1 5.4 3.2 mysqld 23396 23386 2.9 0.0 cache-main 1105 1 2.7 0.0 named 23377 23375 2.3 0.2 nginx 23376 23375 2.1 0.1 nginx 23375 1 1.7 0.0 nginx 23378 23375 1.6 0.0 nginx 1135 3034 0.9 0.0 cwpsrv 1133 3034 0.9 0.0 cwpsrv 2) How to check memory usage per process in Linux using ‘top’ command The Linux ‘top’ command is the best and widely used command that everyone uses to monitor Linux system performance. It displays a real-time view of the system processes running on the interactive interface. You should run the top command in batch mode to find out top memory consuming processes in Linux. In addition, you need to understand the top command output correctly to fix the performance issue on the system. # top -c -b -o +%MEM | head -n 20 | tail -15 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1064 mysql 20 0 886076 209740 8388 S 0.0 5.4 62:41.20 /usr/sbin/mysqld 23396 varnish 20 0 286492 115616 83572 S 0.0 3.0 0:42.24 /usr/sbin/varnishd -P /var/run/varnish.pid -f /etc/varnish/default.vcl -a :82 -T 127.0.0.1:6082 -S /etc/varnish/secret -s malloc,256M 1105 named 20 0 311712 108204 2424 S 0.0 2.8 0:16.41 /usr/sbin/named -u named -c /etc/named.conf 23377 nobody 20 0 153240 89432 2432 S 0.0 2.3 4:35.74 nginx: worker process 23376 nobody 20 0 147096 83316 2416 S 0.0 2.1 2:18.09 nginx: worker process 23375 root 20 0 131028 66764 1616 S 0.0 1.7 0:01.07 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 23378 nobody 20 0 130988 64592 592 S 0.0 1.7 0:00.51 nginx: cache manager process 1135 root 20 0 86708 37572 2252 S 0.0 1.0 0:20.18 cwpsrv: worker process 1133 root 20 0 86708 37544 2212 S 0.0 1.0 0:05.94 cwpsrv: worker process 3034 root 20 0 86704 36740 1452 S 0.0 0.9 0:00.09 cwpsrv: master process /usr/local/cwpsrv/bin/cwpsrv 1067 nobody 20 0 1356200 31588 2352 S 0.0 0.8 0:56.06 /usr/local/apache/bin/httpd -k start 977 nobody 20 0 1356088 31268 2372 S 0.0 0.8 0:30.44 /usr/local/apache/bin/httpd -k start 968 nobody 20 0 1356216 30544 2348 S 0.0 0.8 0:19.95 /usr/local/apache/bin/httpd -k start If you only want to see the command name instead of the absolute path of the command, use the below top command format: # top -b -o +%MEM | head -n 20 | tail -15 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1064 mysql 20 0 886076 210340 8388 S 6.7 5.4 62:40.93 mysqld 23396 varnish 20 0 286492 115616 83572 S 0.0 3.0 0:42.24 cache-main 1105 named 20 0 311712 108204 2424 S 0.0 2.8 0:16.41 named 23377 nobody 20 0 153240 89432 2432 S 13.3 2.3 4:35.74 nginx 23376 nobody 20 0 147096 83316 2416 S 0.0 2.1 2:18.09 nginx 23375 root 20 0 131028 66764 1616 S 0.0 1.7 0:01.07 nginx 23378 nobody 20 0 130988 64592 592 S 0.0 1.7 0:00.51 nginx 1135 root 20 0 86708 37572 2252 S 0.0 1.0 0:20.18 cwpsrv 1133 root 20 0 86708 37544 2212 S 0.0 1.0 0:05.94 cwpsrv 3034 root 20 0 86704 36740 1452 S 0.0 0.9 0:00.09 cwpsrv 1067 nobody 20 0 1356200 31588 2352 S 0.0 0.8 0:56.04 httpd 977 nobody 20 0 1356088 31268 2372 S 0.0 0.8 0:30.44 httpd 968 nobody 20 0 1356216 30544 2348 S 0.0 0.8 0:19.95 httpd 3) Bonus Tips: Checking memory usage in Linux by process using ‘ps_mem’ command The ps_mem utility is used to display the core memory used per program (not per process). This utility allows you to check how much memory is used per program. It calculates the amount of private and shared memory against a program and returns the total used memory in the most appropriate way. It uses the following logic to calculate RAM usage. Total RAM = sum (private RAM for program processes) + sum (shared RAM for program processes). The below ‘ps_mem’ command showing memory usage in Linux by process. # ps_mem Private + Shared = RAM used Program 128.0 KiB + 27.5 KiB = 155.5 KiB agetty 228.0 KiB + 47.0 KiB = 275.0 KiB atd 284.0 KiB + 53.0 KiB = 337.0 KiB irqbalance 380.0 KiB + 81.5 KiB = 461.5 KiB dovecot 364.0 KiB + 121.5 KiB = 485.5 KiB log 520.0 KiB + 65.5 KiB = 585.5 KiB auditd 556.0 KiB + 60.5 KiB = 616.5 KiB systemd-udevd 732.0 KiB + 48.0 KiB = 780.0 KiB crond 296.0 KiB + 524.0 KiB = 820.0 KiB avahi-daemon (2) 772.0 KiB + 51.5 KiB = 823.5 KiB systemd-logind 940.0 KiB + 162.5 KiB = 1.1 MiB dbus-daemon 1.1 MiB + 99.0 KiB = 1.2 MiB pure-ftpd 1.2 MiB + 100.5 KiB = 1.3 MiB master 1.3 MiB + 198.5 KiB = 1.5 MiB pickup 1.3 MiB + 198.5 KiB = 1.5 MiB bounce 1.3 MiB + 198.5 KiB = 1.5 MiB pipe 1.3 MiB + 207.5 KiB = 1.5 MiB qmgr 1.4 MiB + 198.5 KiB = 1.6 MiB cleanup 1.3 MiB + 299.5 KiB = 1.6 MiB trivial-rewrite 1.5 MiB + 145.0 KiB = 1.6 MiB config 1.4 MiB + 291.5 KiB = 1.6 MiB tlsmgr 1.4 MiB + 308.5 KiB = 1.7 MiB local 1.4 MiB + 323.0 KiB = 1.8 MiB anvil (2) 1.3 MiB + 559.0 KiB = 1.9 MiB systemd-journald 1.8 MiB + 240.5 KiB = 2.1 MiB proxymap 1.9 MiB + 322.5 KiB = 2.2 MiB auth 2.4 MiB + 88.5 KiB = 2.5 MiB systemd 2.8 MiB + 458.5 KiB = 3.2 MiB smtpd 2.9 MiB + 892.0 KiB = 3.8 MiB bash (2) 3.3 MiB + 555.5 KiB = 3.8 MiB NetworkManager 4.1 MiB + 233.5 KiB = 4.3 MiB varnishd 4.0 MiB + 662.0 KiB = 4.7 MiB dhclient (2) 4.3 MiB + 623.5 KiB = 4.9 MiB rsyslogd 3.6 MiB + 1.8 MiB = 5.5 MiB sshd (3) 5.6 MiB + 431.0 KiB = 6.0 MiB polkitd 13.0 MiB + 546.5 KiB = 13.6 MiB tuned 22.5 MiB + 76.0 KiB = 22.6 MiB lfd - sleeping 30.0 MiB + 6.2 MiB = 36.2 MiB php-fpm (6) 5.7 MiB + 33.5 MiB = 39.2 MiB cwpsrv (3) 20.1 MiB + 25.3 MiB = 45.4 MiB httpd (5) 104.7 MiB + 156.0 KiB = 104.9 MiB named 112.2 MiB + 479.5 KiB = 112.7 MiB cache-main 69.4 MiB + 58.6 MiB = 128.0 MiB nginx (4) 203.4 MiB + 309.5 KiB = 203.7 MiB mysqld --------------------------------- 775.8 MiB ================================= Over to You In this tutorial, we have shown you how to use ‘top’ & ‘ps’ commands to identify the most memory consuming processes in Linux. If you found this article helpful, please do share with your friends and spread the knowledge. Please feel free to comment below if you have any queries/concerns. We will get back to you as soon as we can. Happy learning! Source Link to comment Share on other sites More sharing options...
aum Posted August 27, 2021 Author Share Posted August 27, 2021 @Matt Sorry for the formatting error. Much obliged for your edit. Will ensure this doesn't happen again. Thank you. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.