Showing posts with label Linux. Show all posts
Showing posts with label Linux. Show all posts

Linux Performance System CPU

Here are several performance tools that enable you to capture performance about CPU utilization.

vmstat - virtual memory statistics is a great command to give a rough idea of how your system performs as a whole.  For CPU specific output

r:  number of current runnable processes.  Ideally this value should match with the number of CPUs available. 
b:  number of processes blocked and waiting for I/O to complete
in:  number of interrupt occurring on the system
cs:  number of context switches happening on the system
us:  % cpu time on user processes
sy:  % cpu time spent in system code
wa:  cpu time waiting for I/O
id:  idle

vmstat -s :  memory, swap, pages paged in, paged out, etc..
      2059580  total memory
      1976900  used memory
      1265408  active memory
       499676  inactive memory
        82680  free memory
       133088  buffer memory
       599228  swap cache
      4095992  total swap
        90796  used swap
      4005196  free swap
        33206 non-nice user cpu ticks
         6098 nice user cpu ticks
        18493 system cpu ticks
      6244845 idle cpu ticks
       158150 IO-wait cpu ticks
         1346 IRQ cpu ticks
         1145 softirq cpu ticks
            0 stolen cpu ticks
      1398931 pages paged in
      8113635 pages paged out
            0 pages swapped in
           24 pages swapped out
      7631737 interrupts
    141139062 CPU context switches
   1329539948 boot time
       138095 forks



top:  The system wide performance statistics.  It shows the load average of the system over the past 1,5,15 minutes, CPUs states, and processes state (sleeping, running, etc.).  While top is running, you can press F while top command is running.  Pressing F key then indicate A for PID, B for PPID, etc..) to display the desired statistics.

top - 13:57:06 up 17:17,  2 users,  load average: 1.18, 0.49, 0.54
Tasks: 194 total,   2 running, 192 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  0.3%sy,  0.0%ni, 98.0%id,  0.3%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2059580k total,  1967912k used,    91668k free,   136012k buffers
Swap:  4095992k total,    90888k used,  4005104k free,   589284k cached

mpstat: shows you how your processes are behaving based on time.  The most advantages is that it shows the time new to statistics, so you can look for a correlation between CPU uage and time of day.  In addition, mpstat can be used to determine whether the CPUs are fully utilized and relatively balanced.  By observing the number of interrupts each CPUs is handling, you can find an imbalance.

mpstat -P 0 1 10  (-P option tells mpstat which CPUs to monitor.  cpu is the number between 0 and total CPUs minus 1.)

mpstat -P ALL 1 10

sar: system activity reporter  

c:  how many processes are being created per second
w:  number of context switches
q:  run queues and load average

sar -w -c -q 1 2

Linux 2.6.18-194.el5 (si01.an.com)      02/18/2009

02:20:18 PM    proc/s
02:20:19 PM      0.00

02:20:18 PM   cswch/s
02:20:19 PM   2242.16

02:20:18 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
02:20:19 PM         1       554      0.86      0.57      0.42

02:20:19 PM    proc/s
02:20:20 PM      0.00

02:20:19 PM   cswch/s
02:20:20 PM   2225.74

02:20:19 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
02:20:20 PM         1       554      0.79      0.56      0.42


runq-sz:   run queue  
plist-sz:  number of processes (sleeping, running, or waiting for I/O)
ldavg-1   ldavg-5  ldavg-15:  average load of the last minute, past 5 minutes, past 15 minutes
cswch:  context swithes per second


to be continued..




ipcs, pmap, lsof

There are several useful Linux performance monitoring commands like uptime, last, ps, top, pgrep -flu oracle, free, etc. the ipcs, pmap, lsof I use them often to get the detail of memory utilization.

The ipcs command with the -m argument can be used to display the configured shared memory segments on the system.
ORATOOLS1 - oracle: ipcs -m
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status     
0x00000000 3571714    root      644        80         2                      
0x00000000 3604484    root      644        16384      2                      
0x00000000 3637253    root      644        280        2                      
0xf14e8d68 4096007    oracle    660        4096       0                      
0x148fbb84 4227085    oracle    660        4096       0     

The command ipcmr with the -M argument can be used to manually delete shared memory segments by a user.  However, you should use pmap and lsof beforehand to identify the processes using the shared memory segment
The pmap Command - details the memory mapped by that particial process including the total memory utilization. 
pmap -x

ORATOOLS1 - oracle: pmap -x 44234423:   ora_pmon_ORATOOLS1
Address           Kbytes     RSS   Dirty Mode   Mapping
0000000000400000  180232   12692       0 r-x--  oracle
000000000b602000    1820     280      72 rwx--  oracle
000000000b7c9000     300     204     196 rwx--    [ anon ]
000000000f707000     576     512     512 rwx--    [ anon ]
0000000060000000       4       0       0 r-xs-  ora_ORATOOLS1_4227085_0
0000000060001000    4092     356     164 rwxs-  ora_ORATOOLS1_4227085_0
0000000060400000    4096       0       0 rwxs-  ora_ORATOOLS1_4227085_1
0000000078800000    4096      28      20 rwxs-  ora_ORATOOLS1_4227085_98
0000000079800000    4096      16       8 rwxs-  ora_ORATOOLS1_4227085_102
0000000079c00000    4096      16      16 rwxs-  ora_ORATOOLS1_4227085_103
000000007a000000    4096     384     136 rwxs-  ora_ORATOOLS1_4227085_104
000000007f000000    4096      80      36 rwxs-  ora_ORATOOLS1_4227085_124
000000007f400000    4096    1836      48 rwxs-  ora_ORATOOLS1_4227085_125
000000007f800000    4096    1084      92 rwxs-  ora_ORATOOLS1_4227085_126
000000007fc00000    4096      76      28 rwxs-  ora_ORATOOLS1_4227085_127
0000000080000000    4096       4       4 rwxs-  ora_ORATOOLS1_4227085_128
00000035b1600000     112     104       0 r-x--  ld-2.5.so
00000035b5600000      84      24       0 r-x--  libnsl-2.5.so
00000035b5615000    2044       0       0 -----  libnsl-2.5.so
00000035b5814000       4       4       4 r-x--  libnsl-2.5.so
00000035b5815000       4       4       4 rwx--  libnsl-2.5.so
00000035b5816000       8       0       0 rwx--    [ anon ]
00002b01b37e1000       8       8       8 rwx--    [ anon ]
00002b01b37e3000       4       4       0 r-x--  libodmd11.so
00002b01b37e4000    1024       0       0 -----  libodmd11.so
00002b01b58f0000      64      64      24 rwx--  zero
00002b01b5900000     144     144       0 rwx--  zero
00002b01b5924000       8       8       8 rwx--    [ anon ]
00002b01b5926000       4       4       0 rwxs-  hc_ORATOOLS1.dat
00002b01b5927000      40      16       0 r-x--  libnque11.so
00002b01b5931000    1020       0       0 -----  libnque11.so
00002b01b5a30000       4       4       4 rwx--  libnque11.so
00002b01b5a31000    1048      24      24 rwx--    [ anon ]
00007fff35e2b000      84      52      52 rwx--    [ stack ]
ffffffffff600000    8192       0       0 -----    [ anon ]
----------------  ------  ------  ------
total kB          770108   22116    3248


The lsof command:  is an extensive command that lists the open files on the system.  It can be used for diagnosing connectivity to a number of resource.  It provides on the usage of standard files, shared memory segments,
and network ports.

 lsof -u oracle | grep 4006
ORATOOLS1 - oracle: lsof -u oracle | grep 4006oracle     4006 oracle  cwd       DIR               8,17      4096               950323 /apps/grid/11.2.0/grid/dbs
oracle     4006 oracle  rtd       DIR              253,0      4096                    2 /
oracle     4006 oracle  txt       REG               8,17 200678430               952608 /apps/grid/11.2.0/grid/bin/oracle
oracle     4006 oracle  mem       REG               0,20   4194304                98378 /dev/shm/ora_+ASM1_4096007_21
oracle     4006 oracle  mem       REG               0,20   4194304                98379 /dev/shm/ora_+ASM1_4096007_22
oracle     4006 oracle  mem       REG               0,20   4194304                98416 /dev/shm/ora_+ASM1_4096007_59
...
oracle     4006 oracle  mem       REG              253,0    139416               786005 /lib64/ld-2.5.so
oracle     4006 oracle  mem       REG              253,0   1717800               786006 /lib64/libc-2.5.so
oracle     4006 oracle  mem       REG              253,0    615136               786018 /lib64/libm-2.5.so
oracle     4006 oracle  mem       REG              253,0     23360               786008 /lib64/libdl-2.5.so
oracle     4006 oracle  mem       REG              253,0    145824               786009 /lib64/libpthread-2.5.so
oracle     4006 oracle  mem       REG              253,0     53448               786010 /lib64/librt-2.5.so
oracle     4006 oracle  mem       REG              253,0    114352               786023 /lib64/libnsl-2.5.so
oracle     4006 oracle  mem       REG               8,17     12315               958409 /apps/grid/11.2.0/grid/lib/libodmd11.so
oracle     4006 oracle  mem       REG               8,17    532417               958508 /apps/grid/11.2.0/grid/lib/libcell11.so
oracle     4006 oracle  mem       REG               8,17    993144               958469 /apps/grid/11.2.0/grid/lib/libskgxp11.so
oracle     4006 oracle  mem       REG               8,17   7898628               958504 /apps/grid/11.2.0/grid/lib/libnnz11.so
oracle     4006 oracle   10r      CHR                1,3                           1449 /dev/null
oracle     4006 oracle   11r      CHR                1,3                           1449 /dev/null
oracle     4006 oracle   12w      REG               8,17    284821              1261703 /apps/grid/11.2.0/grid/log/si01/alertsi01.log
oracle     4006 oracle   13u     IPv4             103693                            UDP 169.254.101.90:59753
oracle     4006 oracle   14u      REG               8,17      1544               958679 /apps/grid/11.2.0/grid/dbs/hc_+ASM1.dat
oracle     4006 oracle   15r      DIR                0,3         0            262537225 /proc/4006/fd
oracle     4006 oracle   16u     unix 0xffff81004225da00                          84931 socket
oracle     4006 oracle   17u     unix 0xffff81004225dcc0                          84932 socket
oracle     4006 oracle   18u     unix 0xffff81004223a100                          84933 socket
oracle     4006 oracle   19u     unix 0xffff81004225cf00                          84934 socket
oracle     4006 oracle   20r      CHR                1,5                           1451 /dev/zero
oracle     4006 oracle   21u     IPv4             103694                            UDP localhost.localdomain:40395
oracle     4006 oracle   22r      CHR                1,5                           1451 /dev/zero
oracle     4006 oracle   23r      REG               8,17   1092096              1179709 /apps/grid/11.2.0/grid/rdbms/mesg/oraus.msb
oracle     4006 oracle   24u      REG               8,17      1544               958679 /apps/grid/11.2.0/grid/dbs/hc_+ASM1.dat
oracle     4006 oracle   25u     IPv4             103695                            UDP 169.254.101.90:51252
oracle     4006 oracle   26u     IPv6             103696                            UDP localhost6.localdomain6:9648
oracle     4006 oracle   28u     IPv4             328057                            TCP si01-vip.an.com:33874->si01-vip.an.com:ncube-lm (ESTABLISHED)

How Numa Allocates Memory

According to MOS, In a NUMA system, processors, memory and I/O are group together into nodes so that each processor is bound to a specific memory address.  By default a NUMA system will chose the local node to allocate memory from and totally exhaust all of the memory from that node before deciding to allocate memory from other remote NUMA nodes.  While this results in holding an object that will fit in a single NUMA node and avoid fragmentation, it can also result in aggressive swapping on one node while there is plenty of memory on other nodes.

It's strongly recommended to evaluate the performance and perform sufficient testing on the NUMA settings.  In our environment, we disable it. If NUMMA is disabled, it's noted by the kernel:

dmesg | grep -i numa

Command line: ro root=/dev/sysVG/rootLV numa=off crashkernel=128M@16M
NUMA turned off
Kernel command line: ro root=/dev/sysVG/rootLV numa=off crashkernel=128M@16M


Alternatively,

 - root: cat /proc/cmdline
ro root=/dev/sysVG/rootLV numa=off crashkernel=128M@16M

cat /etc/grub.conf
 kernel /vmlinuz-2.6.18-238.9.1.el5 ro root=/dev/sysVG/rootLV numa=off crashkernel=128M@16M


  - root: numactl --hardware
 available: 1 nodes (0)
 node 0 size: 145416 MB
 node 0 free: 46749 MB
 node distances:
 node   0
  0:  10

Starting 11g Release 2, _enable_NUMA_support default is set to FALSE.

  1  select a.KSPPINM "Parameter", b.KSPPSTVL "Session Values"
  2  , c.KSPPSTVL "Instance Value"
  3  from x$ksppi a, x$ksppcv b, x$ksppsv c
  4  where a.INDX = b.INDX
  5* and a.KSPPINM = '_enable_NUMA_support'

_enable_NUMA_support
FALSE


TCPDUMP to capture Netowrk Traffic

tcpdump is a network utility that listeners and capture network traffic.  It can be useful in investigating network problem.  Running tcpdump needs to be run as root in able to sniff network packets.
tcpdump -D to get a list of network interfaces on the system
1.eth0
2.eth1
3.eth2
4.any (Pseudo-device that captures on all interfaces)
5.lo

tcpdump -i eth0 -s 65535 -W dump
65535:  max size allowed
w:  outputs captured information to the specified file.  dump is the filename

To show the packets being transferred across the private interconnect:
tcpdump -i 2 | more

TCP tcp_keepalive_time, tcp_keepalive_intvl,tcp_keepalive_probes


You need to check with your network admin for firewall timeout value.  Then you should modify kernel parameter net.ipv4.tcp_keepalive_time to a value lower than the firewall timeout values. This should give the TCP keepalive a chance to keep the connection alive.

On Linux, the keepalive procedures use three user-driven variables:

/proc/sys/net/ipv4/tcp_keepalive_time : How often TCP sends out keepalive messages when keepalive is enabled. Default is 7200 seconds. 


proc/sys/net/ipv4/tcp_keepalive_intvl : How frequent probes are retransmitted, when a probe isn't acknowledged. Default :75 seconds
 

proc/sys/net/ipv4/tcp_keepalive_probes : How many keepalive probes TCP will send, until it decides that the connection is broken. Default:9 seconds


AIX:  (.5 second)
no -a | grep tcp

tcp_keepcnt = 8
tcp_keepidle = 14400
tcp_keepinit = 150
tcp_keepintvl = 150


How To Setup Samba For File Sharing Between Window and Linux

It's real simple to setup Samba to access Linux's folders from Window and vice versa.


1.  Install Samba


[root@si01 yum.repos.d]# yum install samba

2.  Configure Samba by adding the below lines in /etc/samba/smb.conf file
[Sharefolder]
path = /apps/oracle/software/share
available = yes
valid users = oracle
read only = no
browsable = yes
public = yes
writable = yes

3.  Restart Samba service
 /etc/init.d/smb restart
Starting SMB services:                                     [  OK  ]
Starting NMB services:                                     [  OK  ]

4.  Set password to login
[root@si01 software]# smbpasswd -a oracle
New SMB password:
Retype new SMB password:

5.  From the window you can map the drive to the linux server.  That's all you have to do.

Creating / Resizing Logical Volume

Logical Volume Manager is a high level layer that allows great flexibility in to resize or move between physical devices easily.  Below are the summary steps to create volume group (Appsvg), logical volume (AppsOracle), and file system (Apps):

1)  Create physical partitions

 fdisk is used to create 2 partitions  /dev/sdi1 and /dev/sdi2. 

                Device Boot      Start         End      Blocks   Id  System
/dev/sdi1               1        1946    15631213+  8e  Linux LVM
/dev/sdi2            1947        3892    15631245   8e  Linux LVM

pvcreate /dev/sdi1
 Physical volume "/dev/sdi1" successfully created
pvcreate /dev/sdi2
 Physical volume "/dev/sdi2" successfully created

2)  Assign physical partitions to a volume group Appsvg

vgcreate Appsvg /dev/sdi1 /dev/sdi2
 Volume group "Appsvg" successfully created

3)  Create logical volume from volume group

lvcreate –L  16GB Appsvg –n AppsOracle
 mkfs.ext3 /dev/Appsvg/AppsOracle
mkdir /apps
mount /dev/Appsvg/AppsOracle /apps/

4)  Add the entry in /etc/fstab
vim /etc/fstab
/dev/Appsvg/AppsOracle  /apps                   ext3    defaults        1 2


5)  Check volume group, logical volume via commands like vgs, vgdisplay, lvs, lvdisplay , etc..for its characteristic
 
To extend logical volume and file systems, follow these steps:

Add new physical partition (/dev/sdi3, etc.):  vgextend Appsvg /dev/sdi3

Extend logical volume:  lvextend –L  17G /dev/Appsvg/AppsOracle

Resize the file system:  resize2fs /dev/Appsvg/AppsOracle

Install vncserver

root@si01 ~]# yum install vnc-server
Loaded plugins: security
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package vnc-server.x86_64 0:4.1.2-14.el5_5.4 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=================================================================================================
 Package              Arch             Version                       Repository             Size
=================================================================================================
Updating:
 vnc-server           x86_64           4.1.2-14.el5_5.4              ol5_u6_base           2.0 M

Transaction Summary
=================================================================================================
Install       0 Package(s)
Upgrade       1 Package(s)

Total download size: 2.0 M
Is this ok [y/N]: y
Downloading Packages:
Transaction Test Succeeded

[root@si01 ~]# service vncserver start
Starting VNC server: no displays configured                [  OK  ]

Running Transaction
  Updating       : vnc-server                                                                1/2 
  Cleanup        : vnc-server                                                                2/2 

Updated:
  vnc-server.x86_64 0:4.1.2-14.el5_5.4                                                           

Complete!

[root@si01 ~]# xhost +
access control disabled, clients can connect from any host
Running Transaction Test
Finished Transaction Test


As oracle, now you can run any OUI installation like dbca, netca, runInstaller, etc..

Mount Points and /etc/fstab

/etc/fstab is referenced each time the system boots.  It consists fields like device name, mount point, file system type, fsck order like 0 = ignore, 1=fist, 2-9 = second, and third, etc.  After the filesystem is created in /etc/fstab, it's important to use the mount-a to mount the filesystem just created to check for errors.  


umount /apps:  To unmount the file system
fuser -v /apps:  For some reasons you cannot mount a filesystem that has open files, you can display information about the processes using a filesystem.
fuser -km /apps:  To kill all actions on a filesystem
mount -o remount,rw / :  To mount in a single operation.  This is common during recovery operation.

Linux performance monitoring commands

uptime --The amount of time the system up and running
last --Log of system shutdowns and changes in run level
ps -flu oracle:  Processes are owned by the user oracle
pidof ora_arc0_LABDB1:  process identifier
free, cat /proc/meminfo
ipcs –m:  Shared memory segments on the system
ipcrm –M : delete shared memory segments by a user
pmap –x 2103 : details memory mapped by that particular process
ps -flu oracle | grep SCAN => cd /proc/7835 (is the scan process id)
oracle@si01.an.com{LABDB1}/proc/7835> cat status
ipcs –m
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status     
0x68d7e0dc 17727490   oracle    660        4096       0       


/usr/sbin/lsof –u oracle | grep 17727490
slabtop (sort by u: memory,  


strace -p 26175 -o pmon_strace.txt
Process 26175 attached - interrupt to quit
Process 26175 dettached

Screen Linux Commands

List screen sesssions: 
screen -ls
                There are screens on:
                        25247.pts-0.dbcind01   (Detached)

To detach:          
screen -d 25247.pts-0.dbcind01
Ctrl a A

To re-attach:     
screen -r 25247.pts-0.dbcind01

To attach a client / already attached screen
screen -x 25247.pts-0.dbcind01


To kill a screen session
screen -r 25247.pts-0.dbcind01
Ctrl + a  :quit

To start and name the screen
screen -S Ashley

To detach and logout the screen
Ctrl+a then DD


Multiple sessions on the same window
screen top
Ctrl+a  then c     Create a new window
Ctrl+a  then S     Split screen
Ctrl+a  then tab Switch split screens
Ctrl+a  then n     Next window
Ctrl+a then p      Previous window

Linux performance monitoring commands

uptime --The amount of time the system up and running
last --Log of system shutdowns and changes in run level
ps -flu oracle:  Processes are owned by the user oracle
pidof ora_arc0_LABDB1:  process identifier
free, cat /proc/meminfo
ipcs –m:  Shared memory segments on the system
ipcrm –M : delete shared memory segments by a user
pmap –x 2103 : details memory mapped by that particular process
ps -flu oracle | grep SCAN => cd /proc/7835 (is the scan process id)
ipcs –m
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status     
0x68d7e0dc 17727490   oracle    660        4096       0       

/usr/sbin/lsof –u oracle | grep 17727490
slabtop (sort by u: memory, 

strace -p 26175 -o pmon_strace.txt
Process 26175 attached - interrupt to quit
Process 26175 dettached

netstat –i:  Look for RX-OK, TX-OK fileds increasing on all interfaces.  RX-ERR and TX-ERR fields indicate if there is a fault and require investigation

netstat –-inet –a | more
Proto:  Protocol TCP / UDP
Recv-Q / Send-Q:  Receive queue and Send queue.  They should almost be zero.  If they’re increased on the UDP, it’s evident that your interconnect can’t sustain your desired workload.
Local Address              
Foreign Address            
State:  ESTABLISHED, LISTEN for TCP. 

ifconfig eth0:  Look for errors and drop packets

ss –l:  you can use the ss (socket statistic) as an alternative to netstat

tcpdump – D:  capture and display network packets 
1. eth0
2. eth1
tcpdump –i 2 | more

HugePages on Linux

HugePages is a feature integrated into the Linux Kernel with release 2.6.  It provides alternative to 4K page size providing bigger pages.  In other words, it's a method to have large pages where it is useful for working with very large memory.  It's both useful in 32- and 64 bit configurations

Page Table:  Is the data structure of a virtual memory system in OS that mapps between virtual addresses and physical addresses. 
TLB = Translation Lookaside Buffer is a fixed size buffer or cache in a CPU that contains part of the page table to do virual address transalation faster.
hugetlb:  An entry in the TLB that points to a HugePage (larger than regular 4K). HugePage is handled by hugetlb.
hugetlbfs:  Is a new in-memory file system type.  Pages allocated on hugetlbfs are allocated in HugePages.

HugePages and oracle 11g AMM are not compatible.  If you use HugePages, both MEMORY_TARGET / MEMORY_MAX_TARGET parameters are unset.  With AMM all SGA memory is allocated by creating files under /dev/shm.  ramfs (instead of tmpfs mount over /dev/shm) is not supported for AMM at all.  With AMM Oracle needs to grow and reduce the size of SGA dynamically and this is not possible with ramfs.  Below are some facts about Huge Pages and its advantages

  • HugePages can be allocated on-the-fly but they must be reserved during system startup.
  • HugePage sizes from 2MB to 256MB based on kernel version and HW architecture
  • HugePages are not subject to reservation / release after the system startup unless there is system administrator intevention, basically changing the hugepages configuration (i.e. number of pages available or pool size)
  • Larger Page Size and Less # of Pages: Default page size is 4K whereas the HugeTLB size is 2048K. That means the system would need to handle 512 times less pages
  • No Page Table Lookups: Since the HugePages are not subject to replacement (despite regular pages), page table lookups are not required.
  • No Swapping: We must avoid swapping to happen on Linux OS at all
  • No 'kswapd' Operations: kswapd will get very busy if there is a very large area to be paged (i.e. 13 million page table entries for 50GB memory) and will use an incredible amount of CPU resource. When HugePages are used, kswapd is not involved in managing them.
     grep Hugepagesize /proc/meminfo

Redhat - quick reference commands

/boot/grub/grub.conf (boot prompt)
/var/log/dmesg (kernel messgages)
/etc/inittab (id:5:initdefault)

/etc/rc.d/rc.sysinit (system initialization)
ls -ltr /etc/rc.d/init.d (scripts initizliae in /etc/inittab)
lsmod | grep oracle (kernel module for oracle)


/proc:  is a virtual filesystem that provides detailed information about the kernel, hardware and running processes.  Some interesting /proc entries:

/proc/PID
/proc/cpuinfo
/proc/partitions
/proc/meminfo
/proc/dmstat
/proc/swaps
/proc/mounts
/proc/net
/proc/sys/kernel/hostname
/proc/sys/vm/swappiness (indicate how aggressive memory will be swapped out to the sap devices)

/etc/sysctl.conf  , sysctl –a (to view kernel parameters) –w (to set) –p (to sync)

netstat –tanp

to be continued...