我们在 VMware 服务器上运行 Freeradius 服务器,内存使用率很高,我正在尝试排除故障。我们在 radius 服务器的同一台服务器上运行 PostgreSQL 8.4 作为数据库后端。发现此问题是因为我们正在使用 OpenNMS 监控服务器。我们发现它已达到内存限制并开始不时进行交换。
这是内存使用情况:
free -m
total used free shared buffers cached
Mem: 2013 1972 41 0 322 284
-/+ buffers/cache: 1364 648
Swap: 382 0 382
如果我执行 top -d1 并按 m 按内存使用情况对它们进行排序:
top - 10:37:40 up 6 days, 2:20, 2 users, load average: 0.01, 0.02, 0.00
Tasks: 102 total, 1 running, 101 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.0%us, 1.0%sy, 0.0%ni, 96.1%id, 1.0%wa, 0.0%hi, 0.0%si, 0.0%st
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7914 postgres 20 0 102m 22m 21m S 1.0 1.1 0:06.44 postgres
8833 root 20 0 19064 1336 1000 R 1.0 0.1 0:00.03 top
1 root 20 0 8352 808 676 S 0.0 0.0 0:04.07 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.39 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
6 root 20 0 0 0 0 S 0.0 0.0 0:03.40 events/0
7 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuset
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm
12 root 20 0 0 0 0 S 0.0 0.0 0:00.25 sync_supers
13 root 20 0 0 0 0 S 0.0 0.0 0:00.43 bdi-default
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kintegrityd/0
15 root 20 0 0 0 0 S 0.0 0.0 0:00.70 kblockd/0
HTOP 透露了更多关于儿童过程的信息: htop 图片
如果我查看带有子进程的进程,我可以看到 postgresql 似乎正在占用所有的内存:
~:ps auxf
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S Nov03 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Nov03 0:00 \_ [migration/0]
root 4 0.0 0.0 0 0 ? S Nov03 0:00 \_ [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S Nov03 0:00 \_ [watchdog/0]
root 6 0.0 0.0 0 0 ? S Nov03 0:03 \_ [events/0]
root 7 0.0 0.0 0 0 ? S Nov03 0:00 \_ [cpuset]
root 8 0.0 0.0 0 0 ? S Nov03 0:00 \_ [khelper]
root 9 0.0 0.0 0 0 ? S Nov03 0:00 \_ [netns]
root 10 0.0 0.0 0 0 ? S Nov03 0:00 \_ [async/mgr]
root 11 0.0 0.0 0 0 ? S Nov03 0:00 \_ [pm]
root 12 0.0 0.0 0 0 ? S Nov03 0:00 \_ [sync_supers]
root 13 0.0 0.0 0 0 ? S Nov03 0:00 \_ [bdi-default]
root 14 0.0 0.0 0 0 ? S Nov03 0:00 \_ [kintegrityd/0]
root 15 0.0 0.0 0 0 ? S Nov03 0:00 \_ [kblockd/0]
root 16 0.0 0.0 0 0 ? S Nov03 0:00 \_ [kacpid]
root 17 0.0 0.0 0 0 ? S Nov03 0:00 \_ [kacpi_notify]
root 18 0.0 0.0 0 0 ? S Nov03 0:00 \_ [kacpi_hotplug]
root 19 0.0 0.0 0 0 ? S Nov03 0:00 \_ [kseriod]
root 21 0.0 0.0 0 0 ? S Nov03 0:00 \_ [kondemand/0]
root 22 0.0 0.0 0 0 ? S Nov03 0:00 \_ [khungtaskd]
root 23 0.0 0.0 0 0 ? S Nov03 0:00 \_ [kswapd0]
root 24 0.0 0.0 0 0 ? SN Nov03 0:00 \_ [ksmd]
root 25 0.0 0.0 0 0 ? S Nov03 0:00 \_ [aio/0]
root 26 0.0 0.0 0 0 ? S Nov03 0:00 \_ [crypto/0]
root 210 0.0 0.0 0 0 ? S Nov03 0:00 \_ [ata/0]
root 211 0.0 0.0 0 0 ? S Nov03 0:00 \_ [ata_aux]
root 212 0.0 0.0 0 0 ? S Nov03 0:00 \_ [scsi_eh_0]
root 213 0.0 0.0 0 0 ? S Nov03 0:00 \_ [scsi_eh_1]
root 219 0.0 0.0 0 0 ? S Nov03 0:02 \_ [mpt_poll_0]
root 220 0.0 0.0 0 0 ? S Nov03 0:00 \_ [mpt/0]
root 225 0.0 0.0 0 0 ? S Nov03 0:00 \_ [scsi_eh_2]
root 258 0.0 0.0 0 0 ? S Nov03 0:14 \_ [kjournald]
root 557 0.0 0.0 0 0 ? S Nov03 0:00 \_ [kpsmoused]
root 637 0.0 0.0 0 0 ? S Nov03 0:03 \_ [flush-8:0]
root 1164 0.0 0.0 0 0 ? S Nov03 0:03 \_ [vmmemctl]
root 1 0.0 0.0 8352 808 ? Ss Nov03 0:04 init [2]
root 331 0.0 0.0 16848 984 ? S<s Nov03 0:00 udevd --daemon
root 783 0.0 0.0 16876 880 ? S< Nov03 0:00 \_ udevd --daemon
root 784 0.0 0.0 16876 816 ? S< Nov03 0:00 \_ udevd --daemon
daemon 861 0.0 0.0 8092 536 ? Ss Nov03 0:00 /sbin/portmap
statd 873 0.0 0.0 14376 868 ? Ss Nov03 0:00 /sbin/rpc.statd
root 1034 0.0 0.0 54552 2032 ? Sl Nov03 0:00 /usr/sbin/rsyslogd -c4
root 1087 0.0 0.0 3916 628 ? Ss Nov03 0:00 /usr/sbin/acpid
root 1262 0.0 0.1 66612 3164 ? Sl Nov03 2:51 /usr/sbin/vmtoolsd
root 1289 0.0 0.5 151660 11176 ? Ss Nov03 0:06 /usr/sbin/apache2 -k start
www-data 9998 0.0 0.2 151660 5832 ? S Nov06 0:00 \_ /usr/sbin/apache2 -k start
www-data 9999 0.0 0.3 151804 6408 ? S Nov06 0:00 \_ /usr/sbin/apache2 -k start
www-data 10000 0.0 0.2 151660 5832 ? S Nov06 0:00 \_ /usr/sbin/apache2 -k start
www-data 10001 0.0 0.2 151660 5832 ? S Nov06 0:00 \_ /usr/sbin/apache2 -k start
www-data 10002 0.0 0.2 151660 5832 ? S Nov06 0:00 \_ /usr/sbin/apache2 -k start
daemon 1301 0.0 0.0 18708 436 ? Ss Nov03 0:00 /usr/sbin/atd
root 1332 0.0 0.0 22420 1056 ? Ss Nov03 0:00 /usr/sbin/cron
root 1408 0.0 0.0 49168 1144 ? Ss Nov03 0:00 /usr/sbin/sshd
root 20007 0.0 0.1 70452 3384 ? Ss 08:56 0:00 \_ sshd: root@pts/0
root 20042 0.0 0.3 24160 7044 pts/0 Ss 08:56 0:00 \_ -bash
root 14246 0.0 0.0 16444 1140 pts/0 R+ 10:41 0:00 \_ ps auxf
snmp 1416 0.0 0.2 47636 5220 ? S Nov03 0:48 /usr/sbin/snmpd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid
root 1417 0.4 0.0 43788 2004 ? Ss Nov03 36:22 /usr/sbin/snmptrapd -Ln -n -p /var/run/snmptrapd.pid
root 1427 0.0 0.1 53084 2432 ? Ss Nov03 3:12 /usr/sbin/dvtrap -D
101 1755 0.0 0.0 44140 1060 ? Ss Nov03 0:00 /usr/sbin/exim4 -bd -q30m
freerad 1803 0.0 1.1 330624 24280 ? Ssl Nov03 6:33 /usr/sbin/freeradius
root 1825 0.0 0.0 51856 1424 tty1 Ss Nov03 0:00 /bin/login --
root 1980 0.0 0.3 24096 6940 tty1 S+ Nov03 0:00 \_ -bash
root 1826 0.0 0.0 5928 620 tty2 Ss+ Nov03 0:00 /sbin/getty 38400 tty2
root 1827 0.0 0.0 5928 620 tty3 Ss+ Nov03 0:00 /sbin/getty 38400 tty3
root 1828 0.0 0.0 5928 620 tty4 Ss+ Nov03 0:00 /sbin/getty 38400 tty4
root 1829 0.0 0.0 5928 620 tty5 Ss+ Nov03 0:00 /sbin/getty 38400 tty5
root 1830 0.0 0.0 5928 620 tty6 Ss+ Nov03 0:00 /sbin/getty 38400 tty6
postgres 7890 0.0 0.3 104964 6788 ? S Nov08 0:01 /usr/lib/postgresql/8.4/bin/postgres -D /var/lib/postgresql/8.4/main -c config_file=/etc
postgres 7914 0.0 1.1 105064 22796 ? Ss Nov08 0:06 \_ postgres: writer process
postgres 7915 0.0 0.0 104964 1644 ? Ss Nov08 0:01 \_ postgres: wal writer process
postgres 7916 0.0 0.0 105240 1848 ? Ss Nov08 0:01 \_ postgres: autovacuum launcher process
postgres 7917 0.0 0.0 72320 1532 ? Ss Nov08 0:02 \_ postgres: stats collector process
postgres 7924 0.0 1.2 107468 25000 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(51997) idle
postgres 7927 0.0 1.2 107520 24876 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(51998) idle
postgres 7939 0.0 1.2 107512 24820 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(51999) idle
postgres 7941 0.0 1.2 107512 24896 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52000) idle
postgres 7951 0.0 1.2 107468 24876 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52001) idle
postgres 7959 0.0 1.2 107468 25112 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52002) idle
postgres 7962 0.0 1.2 107472 24908 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52003) idle
postgres 7963 0.0 1.2 107472 24968 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52004) idle
postgres 7966 0.0 1.2 107472 24852 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52005) idle
postgres 7969 0.0 1.2 107468 24956 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52006) idle
postgres 7986 0.0 1.2 107468 24988 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52007) idle
postgres 7989 0.0 1.2 107468 25000 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52008) idle
postgres 8017 0.0 1.2 107472 24792 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52009) idle
postgres 8022 0.0 1.2 107516 24788 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52010) idle
postgres 8025 0.0 1.2 107472 24868 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52011) idle
postgres 8028 0.0 1.2 107468 24776 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52012) idle
postgres 8034 0.0 1.2 107472 24880 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52013) idle
postgres 8035 0.0 1.2 107472 24932 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52014) idle
postgres 8054 0.0 1.2 107516 24960 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52015) idle
postgres 9559 0.0 1.2 107468 24756 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52020) idle
postgres 9566 0.0 1.2 107472 24788 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52021) idle
postgres 9569 0.0 1.2 107472 24832 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52022) idle
postgres 9572 0.0 1.2 107468 24832 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52023) idle
postgres 9573 0.0 1.2 107472 24804 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52024) idle
postgres 9574 0.0 1.2 107472 24948 ? Ss Nov08 0:01 \_ postgres: radadm radius 127.0.0.1(52025) idle
postgres 31797 0.0 0.4 106292 9576 ? Ss 10:31 0:00 \_ postgres: radadm radius 172.30.64.102(3128) idle
postgres 3146 0.0 0.4 106292 8708 ? Ss 10:33 0:00 \_ postgres: radadm radius 172.30.64.101(3595) idle
postgres 8607 0.0 0.3 106292 7032 ? Ss 10:37 0:00 \_ postgres: radadm radius 172.30.64.103(2579) idle
我可以做哪些改变来让 postgresql 消耗更少的内存或者释放一些内存?
谢谢。