Archive for the ‘Documentation’ Category

vmstat and paging vs swapping

Good explaination from the Linux Journal website:

Monitoring Virtual Memory with vmstat
By Brian Tanaka
Created 2005-10-31 02:00

Just using a lot of swap space doesn’t necessarily mean that you need more memory. Here’s how to tell when Linux is happy with the available memory and when it needs more.

Linux novices often find virtual memory mysterious, but with a grasp of the fundamental concepts, it’s easy to understand. With this knowledge, you can monitor your system’s memory utilization using vmstat and detect problems that can adversely affect system performance.
How Virtual Memory Works

Physical memory-the actual RAM installed-is a finite resource on any system. The Linux memory handler manages the allocation of that limited resource by freeing portions of physical memory when possible.

All processes use memory, of course, but each process doesn’t need all its allocated memory all the time. Taking advantage of this fact, the kernel frees up physical memory by writing some or all of a process’ memory to disk until it’s needed again.

The kernel uses paging and swapping to perform this memory management. Paging refers to writing portions, termed pages, of a process’ memory to disk. Swapping, strictly speaking, refers to writing the entire process, not just part, to disk. In Linux, true swapping is exceedingly rare, but the terms paging and swapping often are used interchangeably.

When pages are written to disk, the event is called a page-out, and when pages are returned to physical memory, the event is called a page-in. A page fault occurs when the kernel needs a page, finds it doesn’t exist in physical memory because it has been paged-out, and re-reads it in from disk.

Page-ins are common, normal and are not a cause for concern. For example, when an application first starts up, its executable image and data are paged-in. This is normal behavior.

Page-outs, however, can be a sign of trouble. When the kernel detects that memory is running low, it attempts to free up memory by paging out. Though this may happen briefly from time to time, if page-outs are plentiful and constant, the kernel can reach a point where it’s actually spending more time managing paging activity than running the applications, and system performance suffers. This woeful state is referred to as thrashing.

Using swap space is not inherently bad. Rather, it’s intense paging activity that’s problematic. For instance, if your most-memory-intensive application is idle, it’s fine for portions of it to be set aside when another large job is active. Memory pages belonging to an idle application are better set aside so the kernel can use physical memory for disk buffering.
Using vmstat

vmstat, as its name suggests, reports virtual memory statistics. It shows how much virtual memory there is, how much is free and paging activity. Most important, you can observe page-ins and page-outs as they happen. This is extremely useful.

To monitor the virtual memory activity on your system, it’s best to use vmstat with a delay. A delay is the number of seconds between updates. If you don’t supply a delay, vmstat reports the averages since the last boot and quit. Five seconds is the recommended delay interval.

To run vmstat with a five-second delay, type:

vmstat 5

You also can specify a count, which indicates how many updates you want to see before vmstat quits. If you don’t specify a count, the count defaults to infinity, but you can stop output with Ctrl-C.

To run vmstat with ten updates, five seconds apart, type:

vmstat 5 10

Here’s an example of a system free of paging activity:

procs memory swap io system cpu
r b w swpd free buff cache si so bi bo in cs us sy id
0 0 0 29232 116972 4524 244900 0 0 0 0 0 0 0 0 0
0 0 0 29232 116972 4524 244900 0 0 0 0 2560 6 0 1 99
0 0 0 29232 116972 4524 244900 0 0 0 0 2574 10 0 2 98

All fields are explained in the vmstat man page, but the most important columns for this article are free, si and so. The free column shows the amount of free memory, si shows page-ins and so shows page-outs. In this example, the so column is zero consistently, indicating there are no page-outs.

The abbreviations so and si are used instead of the more accurate po and pi for historical reasons.

Here’s an example of a system with paging activity:

procs memory swap io system cpu
r b w swpd free buff cache si so bi bo in cs us sy id
. . .
1 0 0 13344 1444 1308 19692 0 168 129 42 1505 713 20 11 69
1 0 0 13856 1640 1308 18524 64 516 379 129 4341 646 24 34 42
3 0 0 13856 1084 1308 18316 56 64 14 0 320 1022 84 9 8

Notice the nonzero so values indicating there is not enough physical memory and the kernel is paging out. You can use top and ps to identify the processes that are using the most memory.

You also can use top to show memory and swap statistics. Here is an example of the uppermost portion of a typical top report:

14:23:19 up 348 days, 3:02, 1 user, load average: 0.00, 0.00, 0.00
55 processes: 54 sleeping, 1 running, 0 zombie, 0 stopped
CPU states: 0.0% user, 2.4% system, 0.0% nice, 97.6% idle
Mem: 481076K total, 367508K used, 113568K free, 4712K buffers
Swap: 1004052K total, 29852K used, 974200K free, 244396K cached

For more information about top, see the top man page.
Conclusion

It isn’t necessarily bad for your system to be using some of its swap space. But if you discover your system is often running low on physical memory and paging is causing performance to suffer, add more memory. If you can’t add more memory, run memory-intensive jobs at different times of the day, avoid running nonessential jobs when memory demand is high or distribute jobs across multiple systems if possible.

List installed perl modules script

Source: http://www.cpan.org/misc/cpan-faq.html

#!/usr/local/bin/perl

use ExtUtils::Installed;
my $instmod = ExtUtils::Installed->new();
foreach my $module ($instmod->modules()) {
my $version = $instmod->version($module) || “???”;
print “$module — $version\n”;
}

Protected: OpenVPN installation – used on CentOS/Redhat/Fedora

This content is password protected. To view it please enter your password below:

Mount error solution – special device LABEL=/xxx does not exist

Appliies Fedora/Redhat/CentOS,etc., but I have just using the OSes mentioned:

I started to run into this with ext3 when changing mount points:
From the /etc/fstab

LABEL=/backup /backup ext3 defaults 1 2

mount /backup

Error message:
mount: special device LABEL=/backup does not exist

tune2fs -L /backup /dev/cciss/c0d2p1
tune2fs 1.39 (29-May-2006)
mount /backup

How I setup an rsync daemon on CentOS5.

How I setup an rsync daemon and used it between Fedora 5 and CentOS5:

How to start daemon on server you want to sync with:

rsync –daemon –config=/usr/local/etc/rsyncd.conf # two dashes

What is in the /usr/local/etc/rsyncd.conf. Not the most secure, but it is a start:
uid = root
gid = root
use chroot = no
max connections = 4
hosts allow 192.168.0.4
syslog facility = local5
pid file = /var/run/rsyncd.pid

[opt]
path = /opt
comment = Opt directory

[home]
path = /home
comment = Home directory

[varwww]
path = /var/www
comment = Web directories

[varspoolmail]
path = /var/spool/mail
comment = Mail spool directory

How to initate and update any changes while preserving modification times, owner, and group. Also, recursive.

On the server you want to sync to:

rsync -ptrogu rsync://servername:/directory /directory

/proc/cpuinfo document

Source for the information below.

Viewing /proc/cpuinfo will display what type of processor your system is running including the number of CPUs present.

A breakdown of the items you should look for are the following:

* processor – Provides each processor with an identifying number. If you have one processor it will display a 0. If you have more than one processor it will display all processor information separately counting the processors using zero notation.

* cpu family – Authoritatively tells you the type of processor you have in the system. If your computer is an Intel-based system, simply place the number in front of “86” to determine the value. This is helpful to determine the type of architecture of an older system and is helpful in determining which compiled RPM package would best suit that system.

* model name – Gives you the common name of the processor, including the project name.

* cpu MHz – Shows the processor’s precise speed, in megahertz, to the thousandth decimal point.

* cache size – Tells you the amount of level 2 memory cache available to the processor.

* flags – Defines a number of different processor attributes, such as the presence of a floating-point unit (FPU) and the ability to process MMX instructions.

Here is example output from cat /proc/cpuinfo of a system containing 2 CPUs. Note how processor 1 is displayed as ‘processor : 0’ and processor 2 is displayed as ‘processor : 1’ in the output:

processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 2
model name : Intel(R) Pentium(R) 4 CPU 2.80GHz
stepping : 9
cpu MHz : 2793.076
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe cid xtpr
bogomips : 5587.89
clflush size : 64

/proc/meminfo document

cat /proc/meminfo
MemTotal: 2075540 kB
MemFree: 210148 kB
Buffers: 653848 kB
Cached: 827688 kB
SwapCached: 0 kB
Active: 1074788 kB
Inactive: 610512 kB
HighTotal: 1179088 kB
HighFree: 200644 kB
LowTotal: 896452 kB
LowFree: 9504 kB
SwapTotal: 2096472 kB
SwapFree: 2096280 kB
Dirty: 104 kB
Writeback: 0 kB
AnonPages: 203784 kB
Mapped: 60056 kB
Slab: 164348 kB
SReclaimable: 147348 kB
SUnreclaim: 17000 kB
PageTables: 5352 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 3134240 kB
Committed_AS: 679184 kB
VmallocTotal: 114680 kB
VmallocUsed: 4188 kB
VmallocChunk: 110128 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 4096 kB

Source for the information below.

Below you find the individual values we will discuss. First we will discuss the high-level statistics.
High-Level Statistics

* MemTotal: Total usable ram (i.e. physical ram minus a few reserved bits and the kernel binary code)
* MemFree: Is sum of LowFree+HighFree (overall stat)
* MemShared: 0; is here for compat reasons but always zero.
* Buffers: Memory in buffer cache, mostly useless as metric nowadays
* Cached: Memory in the pagecache (diskcache) minus SwapCache
* SwapCache: Memory that once was swapped out, is swapped back in, but is still in the swapfile. (If memory is needed it does not need to be swapped out AGAIN because it is already in the swapfile. This saves I/O.)

Detailed Level Statistics – VM Statistics

VM splits the cache pages into “active” and “inactive” memory. The idea is that if you need memory and some cache needs to be sacrificed for that, you take it from inactive since that is expected to be not used. The VM checks what is used on a regular basis and moves stuff around.

When you use memory, the CPU sets a bit in the pagetable and the VM checks that bit occasionally. Based on that, it can move pages back to active. Within active, there is an order of “longest ago not used” (roughly – it is a little more complex in reality). The longest-ago used ones can get moved to inactive. Inactive is split into two in the above kernel (2.4.18-24.8.0). Some have it three.

* Active: Memory that has been used more recently and usually not reclaimed unless absolutely necessary.
* Inact_dirty: Dirty means “might need writing to disk or swap.” Takes more work to free. Examples might be files that have not been written to yet. They are not written to memory too soon in order to keep the I/O down. For instance, if you are writing logs, it might be better to wait until you have a complete log ready before sending it to disk.
* Inact_clean: Assumed to be easily freeable. The kernel will try to keep some clean stuff around always to have a bit of breathing room.
* Inact_target: Just a goal metric the kernel uses for making sure there are enough inactive pages around. When exceeded, the kernel will not do work to move pages from active to inactive. A page can also get inactive in a few other ways, e.g. if you do a long sequential I/O, the kernel assumes you are not going to use that memory and makes it inactive preventively. So you can get more inactive pages than the target because the kernel marks some cache as “more likely to be never used” and lets it cheat in the “last used” order.

Memory Statistics

* HighTotal: is the total amount of memory in the high region. Highmem is all memory above (approx) 860MB of physical RAM. Kernel uses indirect tricks to access the high memory region. Data cache can go in this memory region.
* LowTotal: The total amount of non-highmem memory.
* LowFree: The amount of free memory of the low memory region. This is the memory the kernel can address directly. All kernel datastructures need to go into low memory.
* SwapTotal: Total amount of physical swap memory.
* SwapFree: Total amount of swap memory free.
* Committed_AS: An estimate of how much RAM you would need to make a 99.99% guarantee that there never is OOM (Out Of Memory) for this workload. Normally the kernel will overcommit memory. That means, say you do a 1GB malloc, nothing happens, really. Only when you start USING that malloc memory you will get real memory on demand and just as much as you use. So you sort of take a mortgage and hope the bank does not go bust. Other cases might include when you mmap a file that is shared only when you write to it and you get a private copy of that data. While it normally is shared between processes. The Committed_AS is a guesstimate of how much RAM/swap you would need worst-case.

To update timezone to support DST on RedHat systems.

To verify the current 2007 timezone settings.

#zdump -v /etc/localtime | grep 2007

————————————————————————————————————–

/etc/localtime.orig Sun Apr 1 09:59:59 2007 UTC = Sun Apr 1 01:59:59 2007 PST isdst=0 gmtoff=-28800
/etc/localtime.orig Sun Apr 1 10:00:00 2007 UTC = Sun Apr 1 03:00:00 2007 PDT isdst=1 gmtoff=-25200
/etc/localtime.orig Sun Oct 28 08:59:59 2007 UTC = Sun Oct 28 01:59:59 2007 PDT isdst=1 gmtoff=-25200
/etc/localtime.orig Sun Oct 28 09:00:00 2007 UTC = Sun Oct 28 01:00:00 2007 PST isdst=0 gmtoff=-28800
————————————————————————————————————–

cd /usr/local/src

mkdir tzdata2007c

Downloaded the following ftp://elsie.nci.nih.gov/pub/tzdata2007c.tar.gz.

Here is the version I used:
Updated time zone source files.

wget ftp://elsie.nci.nih.gov/pub/tzdata2007c.tar.gz

tar -zxvf tzdata2007c.tar.gz
zic -d /tmp/zoneinfo northamerica
cd /tmp/zoneinfo/

Verify the compiled timezone files are correct:

zdump -v /tmp/zoneinfo/PST8PDT | grep 2007

————————————————————————————————————–

/tmp/zoneinfo/PST8PDT Sun Mar 11 09:59:59 2007 UTC = Sun Mar 11 01:59:59 2007 PST isdst=0 gmtoff=-28800
/tmp/zoneinfo/PST8PDT Sun Mar 11 10:00:00 2007 UTC = Sun Mar 11 03:00:00 2007 PDT isdst=1 gmtoff=-25200
/tmp/zoneinfo/PST8PDT Sun Nov 4 08:59:59 2007 UTC = Sun Nov 4 01:59:59 2007 PDT isdst=1 gmtoff=-25200
/tmp/zoneinfo/PST8PDT Sun Nov 4 09:00:00 2007 UTC = Sun Nov 4 01:00:00 2007 PST isdst=0 gmtoff=-28800
————————————————————————————————————–
cd /usr/share/zoneinfo/
cp -p PST8PDT PST8PDT.orig
cp /tmp/zoneinfo/PST8PDT .
cd America/
cp -p Los_Angeles Los_Angeles.orig
cp /tmp/zoneinfo/PST8PDT Los_Angeles

Verify the copied files are correct:

zdump -v /usr/share/zoneinfo/PST8PDT | grep 2007

————————————————————————————————————–

/usr/share/zoneinfo/PST8PDT Sun Mar 11 09:59:59 2007 UTC = Sun Mar 11 01:59:59 2007 PST isdst=0 gmtoff=-28800
/usr/share/zoneinfo/PST8PDT Sun Mar 11 10:00:00 2007 UTC = Sun Mar 11 03:00:00 2007 PDT isdst=1 gmtoff=-25200
/usr/share/zoneinfo/PST8PDT Sun Nov 4 08:59:59 2007 UTC = Sun Nov 4 01:59:59 2007 PDT isdst=1 gmtoff=-25200
/usr/share/zoneinfo/PST8PDT Sun Nov 4 09:00:00 2007 UTC = Sun Nov 4 01:00:00 2007 PST isdst=0 gmtoff=-28800

————————————————————————————————————–

zdump -v /usr/share/zoneinfo/America/Los_Angeles | grep 2007

————————————————————————————————————–

/usr/share/zoneinfo/America/Los_Angeles Sun Mar 11 09:59:59 2007 UTC = Sun Mar 11 01:59:59 2007 PST isdst=0 gmtoff=-28800
/usr/share/zoneinfo/America/Los_Angeles Sun Mar 11 10:00:00 2007 UTC = Sun Mar 11 03:00:00 2007 PDT isdst=1 gmtoff=-25200
/usr/share/zoneinfo/America/Los_Angeles Sun Nov 4 08:59:59 2007 UTC = Sun Nov 4 01:59:59 2007 PDT isdst=1 gmtoff=-25200
/usr/share/zoneinfo/America/Los_Angeles Sun Nov 4 09:00:00 2007 UTC = Sun Nov 4 01:00:00 2007 PST isdst=0 gmtoff=-28800

————————————————————————————————————–

cp -p localtime localtime.orig
ln -fs /usr/share/zoneinfo/PST8PDT localtime

Verify the currently set timezone is correct:
zdump -v /etc/localtime | grep 2007

————————————————————————————————————–

/etc/localtime Sun Mar 11 09:59:59 2007 UTC = Sun Mar 11 01:59:59 2007 PST isdst=0 gmtoff=-28800
/etc/localtime Sun Mar 11 10:00:00 2007 UTC = Sun Mar 11 03:00:00 2007 PDT isdst=1 gmtoff=-25200
/etc/localtime Sun Nov 4 08:59:59 2007 UTC = Sun Nov 4 01:59:59 2007 PDT isdst=1 gmtoff=-25200
/etc/localtime Sun Nov 4 09:00:00 2007 UTC = Sun Nov 4 01:00:00 2007 PST isdst=0 gmtoff=-28800
————————————————————————————————————–

Fedora/CentOS/Redhat Enterprise Linux – yum hangs

Here is the procedure I have used to fix yum when it hangs. Usually, I will find one or more of the following kinds of rpm processes “running”:

# ps -ef | grep rpm
root 27265 26840 0 Feb05 ? 00:00:00 awk -v progname=/etc/cron.daily/rpm progname {????? print progname “:\n”????? progname=””;???? }???? { print; }

The first thing I do is cancel or kill my yum processes. Then, I kill all the running rpm processes using the following:

# killall -9 -r “.*rpmq.*”

Next, I remove all the __ files in the /var/lib/rpm directory:

# cd /var/lib/rpm
# ls
Basenames __db.000 __db.002 Dirnames Group Name Providename Pubkeys Requireversion Sigmd5
Conflictname __db.001 __db.003 Filemd5s Installtid Packages Provideversion Requirename Sha1header Triggername
# rm _*
rm: remove regular empty file `__db.000′? y
rm: remove regular file `__db.001′? y
rm: remove regular file `__db.002′? y
rm: remove regular file `__db.003′? y

Then, rebuild the rpm database:

# rpm –rebuilddb

I usually clean out the yum cache files by running the following:

# yum clean all

Protected: Commands, notes, and misc information (linux, Unix and Windows).

This content is password protected. To view it please enter your password below:

Return top

INFORMATION