Bug 24273 - Speicherverbrauch in UCS 3.0
Speicherverbrauch in UCS 3.0
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: S4 Connector
UCS 3.0
Other Linux
: P5 normal (vote)
: UCS 3.0-2
Assigned To: Stefan Gohmann
Felix Botner
: interim-2
Depends on:
Blocks: 24411 34507
  Show dependency treegraph
 
Reported: 2011-10-31 07:56 CET by Stefan Gohmann
Modified: 2014-04-08 20:24 CEST (History)
2 users (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Stefan Gohmann univentionstaff 2011-10-31 07:56:32 CET
Der Listener hat in UCS 3.0 einen Speicherleck. Nach dem Anlegen von 100 Benutzern verbraucht der Listener ca. 19 MB, nach dem Anlegen von 200 Benutzern sind es 32 MB.
Comment 1 Stefan Gohmann univentionstaff 2011-11-01 09:44:41 CET
Das scheint u.a. an dem samba4-idmap Listener Modul zu liegen:

# Listener starten:
root@master51:~# /etc/init.d/univention-directory-listener start >/dev/null
root@master51:~# ps auwx | grep listener
listener 29912  7.7  1.2  31964 12920 ?        S    00:15   0:00 /usr/sbin/univention-directory-listener -F -p 7389 -b dc=deadlock5,dc=local -m /usr/lib/univention-directory-listener/system -c /var/lib/univention-directory-listener -d 2 -x -ZZ -D cn=admin,dc=deadlock5,dc=local -y /etc/ldap.secret

# 10 Benutzer anlegen und einen Moment warten:
root@master51:~# /root/create_users 10
Object created: uid=test583,cn=users,dc=deadlock5,dc=local
Object created: uid=test584,cn=users,dc=deadlock5,dc=local
Object created: uid=test585,cn=users,dc=deadlock5,dc=local
Object created: uid=test586,cn=users,dc=deadlock5,dc=local
Object created: uid=test587,cn=users,dc=deadlock5,dc=local
Object created: uid=test588,cn=users,dc=deadlock5,dc=local
Object created: uid=test589,cn=users,dc=deadlock5,dc=local
Object created: uid=test590,cn=users,dc=deadlock5,dc=local
Object created: uid=test591,cn=users,dc=deadlock5,dc=local
Object created: uid=test592,cn=users,dc=deadlock5,dc=local
Setting usercount
root@master51:~# sleep 10
listener 29912  6.3  1.6  36604 16984 ?        S    00:15   0:02 /usr/sbin/univention-directory-listener -F -p 7389 -b dc=deadlock5,dc=local -m /usr/lib/univention-directory-listener/system -c /var/lib/univention-directory-listener -d 2 -x -ZZ -D cn=admin,dc=deadlock5,dc=local -y /etc/ldap.secret

# Beenden, idmap Backend verschieben und erneut starten
root@master51:~# /etc/init.d/univention-directory-listener stop >/dev/null
root@master51:~# mv /usr/lib/univention-directory-listener/system/samba4-idmap.py /usr/lib/univention-directory-listener/
root@master51:~# /etc/init.d/univention-directory-listener start >/dev/null
root@master51:~# ps auwx | grep listener
listener 29994 14.8  0.9  16528 10240 ?        S    00:16   0:00 /usr/sbin/univention-directory-listener -F -p 7389 -b dc=deadlock5,dc=local -m /usr/lib/univention-directory-listener/system -c /var/lib/univention-directory-listener -d 2 -x -ZZ -D cn=admin,dc=deadlock5,dc=local -y /etc/ldap.secret
root@master51:~# /root/create_users 10
Object created: uid=test593,cn=users,dc=deadlock5,dc=local
Object created: uid=test594,cn=users,dc=deadlock5,dc=local
Object created: uid=test595,cn=users,dc=deadlock5,dc=local
Object created: uid=test596,cn=users,dc=deadlock5,dc=local
Object created: uid=test597,cn=users,dc=deadlock5,dc=local
Object created: uid=test598,cn=users,dc=deadlock5,dc=local
Object created: uid=test599,cn=users,dc=deadlock5,dc=local
Object created: uid=test600,cn=users,dc=deadlock5,dc=local
Object created: uid=test601,cn=users,dc=deadlock5,dc=local
Object created: uid=test602,cn=users,dc=deadlock5,dc=local
Setting usercount
root@master51:~# sleep 10
root@master51:~# ps auwx | grep listener
listener 29994  3.3  1.1  17872 11860 ?        S    00:16   0:01 /usr/sbin/univention-directory-listener -F -p 7389 -b dc=deadlock5,dc=local -m /usr/lib/univention-directory-listener/system -c /var/lib/univention-directory-listener -d 2 -x -ZZ -D cn=admin,dc=deadlock5,dc=local -y /etc/ldap.secret
root@master51:~#
Comment 2 Stefan Gohmann univentionstaff 2011-11-02 16:34:30 CET
Hier sind mehrere Dinge zusammengekommen:

- es fehlten free-Aufrufe

- BerElement wurde nicht mit ber_free, sondern mit ldap_memfree freigegeben

- Im AD Connector und S4 Connector Listener handler wurde per cPickle das Objekt in eine Datei geschrieben. Das wurde jetzt um ein clear_memo erweitert, da der Handler weiterhin gültig ist und der Referenz Counter des Objekts nicht heruntergezählt wurde.


Gerade durch das Laden von ldb und einigen Samba 4 Modulen in samba4-idmap.py wird jetzt initial deutlich mehr Speicher verwendet. Aber der steigt nicht mehr so extrem an.

Für die QA am besten auf einem 2.4 System ein paar hundert Benutzer anlegen und dann zum Vergleich auf einem 3.0 System. Der Speicherverbrauch auf einem 3.0 sollte deutlich weniger ansteigen. ein paar MB mehr ist aufgrund des Garbage Collector in Python aber OK.
Comment 3 Stefan Gohmann univentionstaff 2011-11-03 09:58:26 CET
Es gibt noch ein Problem beim Joinen von LDAP Servern, dort bricht der Listener ab.
Comment 4 Stefan Gohmann univentionstaff 2011-11-04 23:16:54 CET
(In reply to comment #3)
> Es gibt noch ein Problem beim Joinen von LDAP Servern, dort bricht der Listener
> ab.

Der Fehler wurde behoben.
Comment 5 Stefan Gohmann univentionstaff 2011-11-09 22:09:58 CET
Der Move im S4 Connector geht jetzt schief:

09.11.11 22:05:15.922  LISTENER    ( WARN    ) : handler: s4-connector (failed)
Traceback (most recent call last):
  File "/usr/lib/univention-directory-listener/system/s4-connector.py", line 75, in handler
    old_dn=p.load()
AttributeError: 'cPickle.Pickler' object has no attribute 'load'
Comment 6 Stefan Gohmann univentionstaff 2011-11-09 23:01:10 CET
fixed
Comment 7 Stefan Gohmann univentionstaff 2011-11-10 10:24:42 CET
Eine Anpassung an network.c wurde noch gemacht, da es auf amd64 zu Problemen geführt hat.
Comment 8 Sönke Schwardt-Krummrich univentionstaff 2011-12-01 17:44:56 CET
Beim Anlegen von 500 Benutzern auf einem S4-System wächst der Listener trotzdem noch merklich:

root@mas50:~# eval "$(ucr shell)"; for i in $(seq 1000 1500); do udm \
    users/user create --position cn=users,$ldap_base --set username=myuser$i \
    --set password=univention --set lastname="Sampleuser $i" ; done

Vorher/Hinterher:
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+   COMMAND
29920 listener  20   0  257m  18m 8344 S  0.0  1.9   0:00.40 univention-dire
29920 listener  20   0  417m  67m 9964 S  0.0  6.9   0:10.22 univention-dire

root@mas50:~# ls /usr/lib/univention-directory-listener/system/ -1
bind.py
cups-printers.py
cyrus-mailboxrename.py
cyrusMurderServers.py
cyrus.py
cyrus-shared-folder.py
dhcp.py
faillog.py
gencertificate.py
hosteddomains.py
keytab-member.py
keytab.py
ldap_server.py
ldap_server.pyc
nagios-client.py
nagios-server.py
nfs-shares.py
nscd.py
pkgdb-watch.py
s4-connector.py
samba4-idmap.py
samba-shares.py


Testweise wurden einzelne Module entfernt, Listener neu gestartet und der Test wiederholt:
1) ohne s4-connector.py
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+   COMMAND
30446 listener  20   0  257m  18m 8332 S  0.0  1.9   0:00.30 univention-dire
30446 listener	20	 0	373m  23m 9952 S  0.0  2.4	 0:06.72 univention-dire

2) ohne samba4-idmap.py
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+   COMMAND
29976 listener	20	 0 91880  15m 5512 S  0.0  1.5	 0:00.29 univention-dire
29976 listener	20	 0	133m  58m 5640 S  0.0  6.0	 0:08.81 univention-dire

3) ohne cyrus*.py
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+   COMMAND
29989 listener  20   0  256m  18m 8332 S  0.0  1.9   0:00.34 univention-dire
29989 listener  20   0  417m  67m 9960 S  0.0  6.9   0:10.14 univention-dire
Comment 9 Ingo Steuwer univentionstaff 2012-04-23 22:00:13 CEST
vermutlich aufgetreten an 2012042321002145
Comment 10 Stefan Gohmann univentionstaff 2012-06-26 07:16:18 CEST
Das Problem wurde mit Bug #18619 eingebaut und betrifft die Connectoren. Zur Performance Optimierung werden die Gruppen erst im postrun des Handlers geschrieben, allerdings nur, wenn der Connector in der Initialisierungsphase ist. Die globale Liste wurde aber unabhängig von der Initialisierungsphase erzeugt und nicht wieder gelöscht, weshalb der Listener auch den Speicher nicht wieder freigegeben hat.

Angepasst im S4 Connector und im AD Connector.


## 3.0-1
# Start nach 10 Usern
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
28983 listener  20   0  371m  21m 9872 S  0.3  2.1   0:00.84 univention-dire
# Nach 1000 Usern
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
28983 listener  20   0  543m 192m   9m S  0.0 19.2   0:28.64 univention-dire

## 3.0-2
# Start nach 10 Usern
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
29064 listener  20   0  371m  21m 9900 S  0.0  2.1   0:00.94 univention-dire
# Nach 1000 Usern
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
29064 listener  20   0  376m  26m  10m S  0.0  2.6   0:24.55 univention-dire


Die Werte sind noch nicht ganz optimal, wobei der Garbage Collector vermutlich noch einiges wieder freigibt. Einige weitere Punkte werden mit Bug #27330 adressiert.
Comment 11 Felix Botner univentionstaff 2012-06-28 17:12:02 CEST
TestSkript: Es werden mit dem UDM 30 Gruppen und dann 500 Benutzer (alle in den 30 Gruppen) angelegt.

S4:

Nach ca 500 Benutzern

3.0-1
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
listener  4767 14.4 71.9 764512 743548 ?       D    16:48   1:56 /usr/sbin/uni...

3.0-2
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
listener 21612 12.8  2.4 384520 25508 ?        R    16:47   2:00 /usr/sb...

Synchronisation ins AD war OK

AD:

TODO
Comment 12 Felix Botner univentionstaff 2012-06-29 09:33:45 CEST
AD:

3.0-1
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
listener  2081 10.7 67.6 704960 699100 ?       S    09:14   1:47 /usr/s

3.0-2
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
listener 20224 17.4  1.5  91488 15424 ?        S    09:22   1:35 /usr/sbin/

Changelog Eintrag vorhanden.
Comment 13 Stefan Gohmann univentionstaff 2012-07-20 15:25:33 CEST
UCS 3.0-2 has been released: 
  http://forum.univention.de/viewtopic.php?f=54&t=1905

If this error occurs again, please use "Clone This Bug".