Univention Bugzilla – Bug 24273
Speicherverbrauch in UCS 3.0
Last modified: 2014-04-08 20:24:20 CEST
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.
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:~#
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.
Es gibt noch ein Problem beim Joinen von LDAP Servern, dort bricht der Listener ab.
(In reply to comment #3) > Es gibt noch ein Problem beim Joinen von LDAP Servern, dort bricht der Listener > ab. Der Fehler wurde behoben.
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'
fixed
Eine Anpassung an network.c wurde noch gemacht, da es auf amd64 zu Problemen geführt hat.
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
vermutlich aufgetreten an 2012042321002145
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.
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
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.
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".