mariaDB memory leak

binderth

Neuer Benutzer
Beiträge
2
ich habe auf einem Linux-Server (GB-BACE 3160, 8GB RAM) eine MariaDB laufen:

Code:
root@BinderBrix:~# cat /etc/*release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

root@BinderBrix:~# mysql --version
mysql  Ver 15.1 Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64) using  EditLine wrapper

dabei nimmt sich mariaDB kontinuierlich immer mehr Speicher, bis dann 100% erreicht sind:

hier nach gut 10Tagen bereits über 40% Speicher nur für mariadb:
Code:
root@BinderBrix:~# top
top - 11:19:22 up 10 days, 16:54,  1 user,  load average: 0,15, 0,16, 0,16
Tasks: 113 total,   2 running, 111 sleeping,   0 stopped,   0 zombie
%CPU(s):  0,7 us,  1,5 sy,  0,0 ni, 95,4 id,  2,3 wa,  0,0 hi,  0,1 si,  0,0 st
MiB Spch:   7788,8 total,   2988,4 free,   3611,9 used,   1441,5 buff/cache
MiB Swap:    977,0 total,    977,0 free,      0,0 used.   4176,9 avail Spch

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     ZEIT+ BEFEHL
  87389 root      20   0       0      0      0 I   3,3   0,0   0:13.07 kworker/3:76-events_freezable
  47275 mysql     20   0    9,9g   3,1g  24704 S   2,3  40,6 141:29.96 mariadbd
    527 root      20   0 1430608  57468  34800 S   1,0   0,7   9:07.02 containerd
  87662 root      20   0   11804   5532   3348 R   1,0   0,1   0:00.58 top
     15 root      20   0       0      0      0 R   0,3   0,0   5:22.42 rcu_preempt
      1 root      20   0  167896  12496   9196 S   0,0   0,2   0:29.15 systemd
      2 root      20   0       0      0      0 S   0,0   0,0   0:01.76 kthreadd
      3 root       0 -20       0      0      0 I   0,0   0,0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0,0   0,0   0:00.00 rcu_par_gp
      5 root       0 -20       0      0      0 I   0,0   0,0   0:00.00 slub_flushwq

direkt nach reboot:
Code:
root@BinderBrix:~# top
top - 11:24:09 up 1 min,  1 user,  load average: 4,02, 1,30, 0,46
Tasks: 128 total,   2 running, 126 sleeping,   0 stopped,   0 zombie
%CPU(s):  2,0 us,  5,9 sy,  0,0 ni, 20,4 id, 71,4 wa,  0,0 hi,  0,3 si,  0,0 st
MiB Spch:   7788,8 total,   6907,8 free,    809,1 used,    305,3 buff/cache
MiB Swap:    977,0 total,    977,0 free,      0,0 used.   6979,7 avail Spch

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     ZEIT+ BEFEHL
    605 mysql     20   0 9856,6m 434048  23120 S   5,9   5,4   0:03.83 mariadbd
    667 root      20   0 1983088  84736  57228 S   5,3   1,1   0:01.49 dockerd
      7 root      20   0       0      0      0 I   3,6   0,0   0:00.54 kworker/0:0-events
    755 root      20   0   11804   5552   3376 R   1,3   0,1   0:00.28 top
    272 root      20   0   26264   6408   4652 S   1,0   0,1   0:00.49 systemd-udevd
    124 root       0 -20       0      0      0 I   0,7   0,0   0:00.23 kworker/1:1H-kblockd
    802 root      20   0   11248   2368   1852 R   0,7   0,0   0:00.02 modprobe
      9 root      20   0       0      0      0 I   0,3   0,0   0:00.27 kworker/u8:0-flush-8:0
     15 root      20   0       0      0      0 I   0,3   0,0   0:00.26 rcu_preempt
     56 root       0 -20       0      0      0 I   0,3   0,0   0:00.12 kworker/3:1H-kblockd
     68 root       0 -20       0      0      0 I   0,3   0,0   0:00.14 kworker/2:1H-kblockd
    766 root      20   0   26268   3496   1736 S   0,3   0,0   0:00.01 (udev-worker)
      1 root      20   0  167764  12256   9216 S   0,0   0,2   0:02.84 systemd

ein einfaches restart von mariadb.service hilft leider nicht. nach dem Neustart schnappt sich mariadb sofort wieder die vorherige Speicherauslastung.

Würde es helfen, die MariaDB als docker-Container laufen zu lassen? Docker ist installiert, aber noch ohne container. Auch sonst läuft auf der Maschine bis auf ein Zabbix-Agent nichts. ach ja, das ist eine Standard-MariaDB, keine Anpassungen. Es kommen kontinuierlich Daten an, weil der Server als Persistenz für ein smarthome dient und u.a. diverse Sensoren regelmässig Daten ablegen, z.B. sekündliche Stromdaten.
 
Werbung:
Guten Morgen,

MariaDB macht das schon richtig ! Es wird wohl an der Konfiguration der DB liegen.
Weiterhin wird dir MariaDB / MySQL niemals SPeicher zurückgeben, da die DB
davon ausgeht, das wenn du einmal sehr viel Speicher brauchst, wirst du diesen
wohl wieder brauchen. Und dann ist es sinnlos und zeitaufwendig diesen freizugeben
und dann wieder zu holen.

Poste einfach mal deine my.cnf

Gruß Bernd
 
Werbung:
Hallo Bernd,

ob MariaDB das richtig macht, glaub ich nicht, jedenfalls geht das weiter bis zum Crash bei 100% (siehe 10.Februar) Am 15.Februar hatte ich den RAM verdoppelt auf 8GB und am 21.Februar hatte ich mal den Service neugestartet:

2024-02-27_07h43_35.png

my.cnf:
Code:
# The MariaDB configuration file
#
# The MariaDB/MySQL tools read configuration files in the following order:
# 0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read.
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.
#
# If the same option is defined multiple times, the last one will apply.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# If you are new to MariaDB, check out https://mariadb.com/kb/en/basic-mariadb-articles/

#
# This group is read both by the client and the server
# use it for options that affect everything
#
[client-server]
# Port or socket location where to connect
# port = 3306
socket = /run/mysqld/mysqld.sock

# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/

Wie gesagt, Standard.
was ich noch in der 50-server.cnf habe:
Code:
[mysqld]
pid-file                = /run/mysqld/mysqld.pid
basedir                 = /usr
bind-address            = 192.168.78.13
expire_logs_days        = 10
character-set-server    = utf8mb4
collation-server        = utf8mb4_general_ci
innodb_buffer_pool_size = 2G
innodb_open_files       = 20000
 
Zurück
Oben