sclorg / postgresql-container

PostgreSQL container images based on Red Hat Software Collections and intended for OpenShift and general usage. Users can choose between Red Hat Enterprise Linux, Fedora, and CentOS based images.
http://softwarecollections.org
Apache License 2.0
163 stars 211 forks source link

How to tune memory when running image in OpenShift #518

Open dtsao opened 1 year ago

dtsao commented 1 year ago

Container platform

OCP 4

Version

postgresql-15:1-10 from https://catalog.redhat.com/software/containers/rhel8/postgresql-15/63d29a05fd1c4f5552a305b3?architecture=amd64&tag=1-10&push_date=1684253325000

running via a deployment config on Openshift 4.10

OS version of the container image

RHEL 8

Bugzilla, Jira

No response

Description

The readme for v15 refers to the --memory parameter. Where do I set the --memory parameter in an Openshift deployment config (DC) so that the shared_buffers and effective_cache_size are set automatically?

My DC has resource limits configured under spec:template:spec as:

      containers:
        - resources:
            limits:
              cpu: '1'
              memory: 4Gi
            requests:
              cpu: 100m
              memory: 400Mi

but my shared_buffers is the default 128MB:

# show shared_buffers;
 shared_buffers
----------------
 128MB
(1 row)

Do you recommend that I instead manually set the shared_buffers and effective_cache_size parameters by editing the postgresql.conf file located at /var/lib/pgsql/data/userdata/postgresql.conf?


FYI - For anyone who comes across this post due to errors like this in their logs:

ERROR:  could not resize shared memory segment "/PostgreSQL.1237418266" to 33554432 bytes: No space left on device

You should check the space allocated to /dev/shm:

sh-4.4$ df -h
Filesystem                            Size  Used Avail Use% Mounted on
...
shm                                    64M  1.1M   63M   2% /dev/shm
...

I increased the /dev/shm space from 64M to 128M via the technique here: https://stackoverflow.com/questions/43373463/how-to-increase-shm-size-of-a-kubernetes-container-shm-size-equivalent-of-doc/63152020#63152020

by adding lines to the DC:

spec:
  template:
    spec:
      volumes:
        - name: dshm
          emptyDir:
            medium: Memory
            sizeLimit: 128Mi
       containers:
          volumeMounts:
            - name: dshm
              mountPath: /dev/shm

After the above DC change, the could not resize shared memory segment errors have stopped.

Reproducer

No response

fila43 commented 1 year ago

Off the top of my head, It seems that you tried to set up a higher memory limit than available, so the server set the default one.