Sunday, May 19, 2024

How to Speed up Your Linux PC

Datamation content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

Hardware is getting amazingly fast. But sometimes it seems like
software gets slower faster than hardware speeds up.
So why do so many apps feel poky?

In this series, I’ll look at some of the ways you can examine your
system to see what’s taking up resources, and offer some tips on
slimming your system down so it runs faster.

I’ll start with two of the basic command-line applications
for measuring performance: top and ps.


When you suspect something is running away with system resources,
top should be your first recourse. It gives you a screen
that updates every couple of seconds, showing you a list
of the processes that are hogging the most CPU.

The fields, in order, are:


process ID — you can use this for killing the process or finding
out more about it


the user who started the process, most often either you or root


The priority of the process. This usually doesn’t mean much on Linux


How “nice” the process is — whether it will step aside when other
processes need to do some work. Most normal programs will be at zero;
a positive number up to 20 means the process will give way to
other processes, while a negative number means an important
process (often part of the kernel) which will take priority
over normal programs.


The process’s virtual memory size. This is virtually meaningless —
I’ll write more about memory in a future article.


The amount of memory the process is currently using in memory.
Again, there are caveats and this may not mean quite what you
think it does.


Shared memory: how many shared libraries the process is using.


A single letter code representing the process’s status.
R means it’s actively running. S means sleeping, but you’ll also see it
for lots of running processes, if top happens to check in between
updates. T means it’s temporarily stopped (you can stop a process
by typing Control-Z in the terminal where you started it).
D means it’s in uninterruptible sleep, perhaps because it’s
waiting for a device to respond. Finally, Z means it’s a zombie
process: one that has exited but its parent process isn’t paying
attention any more. You can’t get rid of zombie processes, but
they don’t take up any significant system resources.


What percentage of the CPU the process is currently taking


What percentage of memory the process is using


How much CPU time the process has accumulated, in hundredths of a second.


The name of the process

Top has some useful options, too. For instance, if you want to run
top just once and save its output into a file, you can do it like this:

top -b -n 1

When you’re running top interactively, you can change the way it sorts:
type M to sort by memory use rather than CPU, T to sort by total time,
or P to go back to sorting by CPU. Those letters are all capitalized.

The next workhorse is ps, Process Status. If you type it with no arguments,
you’ll probably get something that’s not very useful:

13978 pts/200:00:00 bash
15375 pts/200:00:00 ps

Add a u (no dash in front of it) to get a lot more information
in “user-oriented format”:

(imbrium)- ps u
akkana3848  0.0  0.04188  2084 tty1 S08:460:00 -tcsh
akkana3905  0.0  0.03504  1552 tty1 S+08:460:00 /bin/bash /usr/
akkana3965  0.0  0.02904824 tty1 S+08:460:00 xinit /home/akk
akkana4022  0.0  0.01868504 tty1 S08:460:00 sh /home/akkana
akkana4032  0.0  0.19232  3664 tty1 S08:460:00 xterm -geometry
akkana4034  0.0  0.05572  2840 tty1 S08:460:00 /usr/bin/python
akkana4038  0.0  0.2  12356  7364 tty1 S08:460:01 openbox
akkana4040  0.0  0.03976  2000 pts/0Ss08:460:00 -tcsh
akkana4057  0.0  0.03140716 tty1 S08:460:00 dbus-launch --a
akkana4065  0.0  0.01868532 tty1 S08:460:00 /bin/sh /usr/lo
akkana4070  0.0  0.01868548 tty1 S08:460:00 /bin/sh /usr/lo
akkana4074  0.7  3.1 261620 98948 tty1 Sl08:461:33 /usr/local/fire
akkana4132  0.0  0.18796  3588 tty1 S08:490:00 xterm -geometry
akkana4133  0.0  0.04456  2576 pts/1Ss+  08:490:00 -tcsh
akkana4598  0.0  0.18684  4952 pts/0S+08:510:00 mutt
akkana5221  0.0  0.5  26340 17124 tty1 S09:030:05 emacs
akkana12067  0.0  0.4  27612 13044 tty1 Sl11:050:00 python /home/ak
akkana13535  0.0  0.6  33096 18624 tty1 S11:460:01 /usr/local/bin/
akkana13977  0.0  0.18788  5472 pts/1S11:570:00 xterm -bg white
akkana13978  0.0  0.03964  2048 pts/2Ss11:570:00 -tcsh
akkana15400  0.0  0.02704976 pts/2R+12:240:00 ps u

The fields pretty much mirror the ones you see in top, with
slightly different names and units.

You may notice that ps u only shows you processes owned by you.
When you’re trying to speed up your system, don’t forget about system
processes. Sometimes they can take up a significant amount of time.
ps uax will show all processes: the a means “all processes”,
but despite that, it doesn’t really show all processes until
you tack on the x to show processes that aren’t attached to
any terminal — for instance, processes that were started when your
system booted.

One thing you may have noticed about ps output is that it isn’t sorted
in any useful order. For instance, take this output of ps uax:

(imbrium)- ps uax
root 1  0.0  0.03080  1884 ?Ss08:450:00 /sbin/init
root 2  0.0  0.0  0 0 ?S
It goes on, but you get the idea: the list is obviously sorted by
process ID. It would make a lot more sense to sort by CPU or memory
use, especially when you're trying to speed up your system.
So you can specify a sort order, like:

ps uax --sort=-rss

to sort by memory use (resident set size). The dash in front of rss
tells ps to put the biggest processes first.
Other useful sort options are -pcpu, to sort by CPU use
and -time to sort by cumulative time the process has ued.

You can also use those specifiers to indicate what fields ps will show,
in case you're not interested in details like Status, Start time, Priority
and so forth.
For the full list of parameters you can use, search for
STANDARD FORMAT SPECIFIERS in the ps manual page.

For instance, here's a useful ps command that gives much more useful

ps ax --sort=-pcpu o user,pid,pcpu,pmem,vsz,rss,stat,time,comm

Of course, you wouldn't want to type that every time. So choose a set
of arguments that make sense to you, and make a shell
alias in your .bashrc file:

alias psall "ps ax --sort=-pcpu o user,pid,pcpu,pmem,vsz,rss,stat,time,comm"

Akkana Peck is a freelance programmer and author of the book
Beginning GIMP: From Novice to Professional.
She'll be discussing some techniques for speeding up Linux in a talk at
OSCON this Wednesday.
Her website is is

Article courtesy of Linux Planet.

Subscribe to Data Insider

Learn the latest news and best practices about data science, big data analytics, artificial intelligence, data security, and more.

Similar articles

Get the Free Newsletter!

Subscribe to Data Insider for top news, trends & analysis

Latest Articles