Debugging shared memory issues on CentOS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I am trying to debug some shared memory issues with Postgres 9.3.1 and CentOS release 6.3 (Final).  I have a database machine that probably has some misconfigured shared memory settings.  It's getting into 2+ GB of swap.  Restarting postgres frees all of the memory, but after a few hours of normal usage it will go back into swap.  During light usage, postgres will *very* slowly release some memory, but not all.  Using top, I can see that many of the postgres connections are using shared memory:

```
top - 09:38:16 up 1 day, 21:21,  3 users,  load average: 0.40, 0.54, 0.45
Tasks: 253 total,   2 running, 251 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.7%us,  0.2%sy,  0.0%ni, 97.8%id,  1.2%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   6998260k total,  6849048k used,   149212k free,      248k buffers
Swap: 440478516k total,  1981912k used, 438496604k free,  1541356k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3534 postgres  20   0 2330m 1.4g 1.1g S  0.0 20.4   1:06.99 postgres: deploy mtalcott 10.222.154.172(53495) idle
 9143 postgres  20   0 2221m 1.1g 983m S  0.0 16.9   0:14.75 postgres: deploy 
mtalcott 10.222.154.167(35811) idle
 6026 postgres  20   0 2341m 1.1g 864m S  0.0 16.4   0:46.56 postgres: deploy 
mtalcott 10.222.154.167(37110) idle
18538 postgres  20   0 2327m 1.1g 865m S  0.0 16.1   2:06.59 postgres: deploy 
mtalcott 10.222.154.172(47796) idle
 1575 postgres  20   0 2358m 1.1g 858m S  0.0 15.9   1:41.76 postgres: deploy 
mtalcott 10.222.154.172(52560) idle
```

There are about 29 total idle connections.  
`sudo ipcs -m` only shows:
```
  ------ Shared Memory Segments --------
  key        shmid      owner      perms      bytes      nattch     status
  0x0052e2c1 163840     postgres   600        48         21
```

Surprisingly, it only shows it using 48 bytes.  Any ideas why that would be?

My shared memory settings are:
kernel.shmmax = 8589934592  # 8 GB
kernel.shmall = 2097152     # * 4096 = 8 GB  
kernel.shmmni = 4096

Do I need to set lower shared memory limits?  In the past, I've run into issues using pg_dump and executing larger transactions with lower values.  If I can monitor the shared memory segment I can better understand when postgres is allocating and releasing..

[Postgresql General]     [Postgresql PHP]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Yosemite]

  Powered by Linux