LDP/LDP/howto/docbook/Small-Memory.sgml

163 lines
8.2 KiB
Plaintext

<!DOCTYPE ARTICLE PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
<article id="SmallMemory">
<articleinfo>
<title>Small Memory mini-HOWTO</title>
<author>
<firstname>Todd</firstname>
<surname>Burgess</surname>
<affiliation>
<address> <email>tburgess@uoguelph.ca</email> </address>
</affiliation>
</author>
<abstract>
<para>Describes how to run Linux on a system with a small amount of
memory.</para>
</abstract>
<pubdate>2000-12-12</pubdate>
<revhistory>
<revision>
<revnumber>0.1</revnumber>
<date>2000-12-01</date>
<authorinitials>tb</authorinitials>
</revision>
</revhistory>
</articleinfo>
<sect1 ID="Introduction">
<title>Introduction</title>
<para>Assuming buying more memory is out of the question there are many
things you can do to tighten up memory usage in Linux. </para>
<para>Many Linux distributions out of the box are quite bloated from a
memory perspective. They run more services and offer more features than most of
us will ever need. By removing many of these services you can free up several
megabytes of real memory.</para>
<para> My own system is a 486DX2-66 with 12MB of physical memory and 12MB
of swap space. It has run Linux for the last 3 years quite happily, and
hopefully it will run Linux for several more years. :)</para>
</sect1>
<sect1 id="LinuxKernel">
<title>Linux Kernel</title>
<para>All the Linux kernels which come with distributions are quite
bloated and contain more features than any of us will ever need or use. If you
have not re-compiled your own kernel, it is highly recommended that you do so.
How to re-compile a kernel is beyond the scope of this document, but many
excellent Linux books and guides cover this subject in intimate detail.</para>
<para>If you do re-compile your kernel, remember to put in no more
features than you need. For instance: how many of you include PLIP support in
your kernel? How many of you who include it actually use it? Smaller kernels
require less time to load, use less memory, and use less CPU cycles. </para>
<para>Another thing is modules. I personally do not use them because I
found them to be a cumbersome. If you use them and like them then they can help
to relieve "kernel bloat." </para>
</sect1>
<sect1 id="VConsoles">
<title>Virtual Consoles</title>
<para>VCs are a great way to free up memory. Most Linux distributions run
about 6 of them out of the box. On average running 6 VCs requires about 4MB of
memory. Removing a couple of them can free up a couple MBs of memory. Most
users can get away with running only 3 or 4 VCs. How many you choose to remove
is a matter personal preference. Just remember that the fewer you run, the more
memory your applications will have to run. </para>
<para>The file which outlines how many VCs get loaded is
<filename>/etc/inittab</filename>. In order to remove VCs: </para>
<orderedlist>
<listitem>
<para>Load <filename>/etc/inittab</filename> in a text
editor.</para>
</listitem>
<listitem>
<para>Look for a line which looks like the following line (the key
feature being a line which starts with c1): </para>
<programlisting>c1:12345:respawn:/sbin/getty tty1 38400
linux</programlisting>
<para>Start at the highest number (i.e. c6) and comment it out by
inserting a '#' in the first row. Repeat this step as many times as needed.
Remember every line you comment out is one less VC running. </para>
</listitem>
<listitem>
<para>Re-boot the system for your changes to take effect. </para>
</listitem>
</orderedlist>
</sect1>
<sect1 ID="Daemons">
<title>Daemons</title>
<para>Many Linux distributions run daemons most of us will never use.
Most of these daemons are loaded by scripts. Where these scripts are and what
they are called depends on your Linux distribution. Slackware set-up scripts
are buried in <filename>/etc/rc.d/rc.*</filename>. </para>
<para>Before you proceed, a knowledge of Unix shell script programming
would be a definite asset. However, if you have no experience writing Unix
shell scripts, what follows is probably the quickest introduction to shell
script programming ever written.</para>
<para>Take the following shell script:</para>
<programlisting>#!/bin/sh echo "hello world"
#echo "good bye cruel world"</programlisting>
<para>The previous code will echo the string "hello world". Shell scripts
must contain the the line
<programlisting>"#!/bin/sh"</programlisting> at the very top line.
After that every line is executed as if you had typed it at the keyboard (think
of shell scripts as nothing more then glorified keyboard macros).</para>
<para>Lines which begin with a '#' are said to be commented out because
they do not get executed by the shell. Most start-up scripts when they load
daemons look like: </para>
<programlisting>if somecondition
do something
fi</programlisting>
<para>What you want to do is comment out every line starting with the <programlisting>if</programlisting>
statement and ending with the <programlisting>fi</programlisting> statement. </para>
<para>If you want to find where a daemon is loaded,
search the start-up scripts for the name of the daemon. If I wanted to find
where <application>inetd</application> is loaded in Slackware I would do the following:
<screen>$ cd /edt/rc/d $grep -n inetd rd.*</screen> </para>
<sect2>
<title><application>inetd</application></title>
<para><application>inetd</application> allows people to do things like <command>telnet</command>, <command>ftp</command>, and send <command>talk</command>
requests to your machine. If you never use your system as a server or need to
access any of its services remotely you can remove <application>inetd</application>. </para>
</sect2>
<sect2>
<title><application>lpd</application></title>
<para><application>lpd</application> is used to print files on your printer using the
<command>lpr</command> command. If you never print on your Linux
box you can remove <application>lpd</application>. If, however, you own a HP Deskjet &trade; printer and
would like to print, I highly recommend the package I put together called
dj-printcap which is available at:</para>
<para>
<ulink
URL="ftp://ftp.redhat.com/pub/redhat/redhat-4.2/i386/RedHat/RPMS/dhcpcd-0.6-2.i386.rpm">ftp://sunsite.unc.edu/pub/Linux/system/Printing/dj-printcap.tar.gz</ulink>
</para>
</sect2>
<sect2>
<title><application>nfsd</application> and <application>mountd</application></title>
<para>These two daemons are used to run an NFS server. If you never use
your Linux system as an NFS server you can safely remove these two daemons.
</para>
</sect2>
<sect2>
<title><application>portmap</application></title>
<para>The <application>portmap</application> daemon is used to handle RPC services. If you do not
run an NFS server or any other RPC programs you can remove <application>portmap</application>. </para>
</sect2>
<sect2>
<title><application>sendmail</application></title>
<para><application>sendmail</application> is another daemon which requires a fair bit of memory.
If you never use your Linux box as a relay for sending e-mail or you never
receive mail on your Linux box, you can probably remove <application>sendmail</application>. If you do send
e-mail from your Linux box most e-mail clients can be set-up to send e-mail
from another mail server.</para>
</sect2>
<sect2>
<title>others</title>
<para>There may be other daemons your system starts up which you do
not need. Remove what you feel you have to. Two daemons which you must run are
<application>syslogd</application> and <application>klogd</application>. </para>
</sect2>
</sect1>
<sect1 ID="Conclusion">
<title>Conclusions</title>
<para>The previous discussion illustrates the steps I took to tighten up
my memory usage on my Linux box. Hopefully I have provided you with some
insight into what you can do with your Linux box to conserve memory. Good luck
and happy hacking!</para>
</sect1>
</article>