← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1524916] Re: neutron-ns-metadata-proxy uses ~25MB/router in production

 

Reviewed:  https://review.openstack.org/431691
Committed: https://git.openstack.org/cgit/openstack/neutron/commit/?id=3b22541a2aa9a5b06e2bff256701dbe24554c17c
Submitter: Jenkins
Branch:    master

commit 3b22541a2aa9a5b06e2bff256701dbe24554c17c
Author: Daniel Alvarez <dalvarez@xxxxxxxxxx>
Date:   Thu Feb 9 18:30:23 2017 +0000

    Switch ns-metadata-proxy to haproxy
    
    Due to the high memory footprint of current Python ns-metadata-proxy,
    it has to be replaced with a lighter process to avoid OOM conditions in
    large environments.
    
    This patch spawns haproxy through a process monitor using a pidfile.
    This allows tracking the process and respawn it if necessary as it was
    done before. Also, it implements an upgrade path which consists of
    detecting any running Python instance of ns-metadata-proxy and
    replacing them by haproxy. Therefore, upgrades will take place by
    simply restarting neutron-l3-agent and neutron-dhcp-agent.
    
    According to /proc/<pid>/smaps, memory footprint goes down from ~50MB
    to ~1.5MB.
    
    Also, haproxy is added to bindep in order to ensure that it's installed.
    
    UpgradeImpact
    
    Depends-On: I36a5531cacc21c0d4bb7f20d4bec6da65d04c262
    Depends-On: Ia37368a7ff38ea48c683a7bad76f87697e194b04
    
    Closes-Bug: #1524916
    Change-Id: I5a75cc582dca48defafb440207d10e2f7b4f218b


** Changed in: neutron
       Status: In Progress => Fix Released

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1524916

Title:
  neutron-ns-metadata-proxy uses ~25MB/router in production

Status in neutron:
  Fix Released
Status in tripleo:
  Triaged

Bug description:
  [root@mac6cae8b61e442 memexplore]# ./memexplore.py all metadata-proxy | cut -c 1-67
  25778 kB	(pid 420) /usr/bin/python /bin/neutron-ns-metadata-proxy -
  25774 kB	(pid 1468) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25778 kB	(pid 1472) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25770 kB	(pid 1474) /usr/bin/python /bin/neutron-ns-metadata-proxy
  26528 kB	(pid 1489) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25778 kB	(pid 1520) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25778 kB	(pid 1738) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25774 kB	(pid 1814) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25774 kB	(pid 2024) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25774 kB	(pid 3961) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25774 kB	(pid 4076) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25770 kB	(pid 4099) /usr/bin/python /bin/neutron-ns-metadata-proxy
  [...]
  25778 kB	(pid 31386) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25778 kB	(pid 31403) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25774 kB	(pid 31416) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25778 kB	(pid 31453) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25770 kB	(pid 31483) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25770 kB	(pid 31647) /usr/bin/python /bin/neutron-ns-metadata-proxy
  25774 kB	(pid 31743) /usr/bin/python /bin/neutron-ns-metadata-proxy

  2,581,230 kB Total PSS

  if we look explicitly at one of those processes we see:

  # ./memexplore.py pss 24039
  0 kB	7f97db981000-7f97dbb81000 ---p 0005f000 fd:00 4298776438                 /usr/lib64/libpcre.so.1.2.0
  0 kB	7f97dbb83000-7f97dbba4000 r-xp 00000000 fd:00 4298776486                 /usr/lib64/libselinux.so.1
  0 kB	7fff16ffe000-7fff17000000 r-xp 00000000 00:00 0                          [vdso]
  0 kB	7f97dacb5000-7f97dacd1000 r-xp 00000000 fd:00 4298779123                 /usr/lib64/python2.7/lib-dynload/_io.so
  0 kB	7f97d6a06000-7f97d6c05000 ---p 000b1000 fd:00 4298777149                 /usr/lib64/libsqlite3.so.0.8.6
  [...]
  0 kB	7f97d813a000-7f97d8339000 ---p 0000b000 fd:00 4298779157                 /usr/lib64/python2.7/lib-dynload/pyexpat.so
  0 kB	7f97dbba4000-7f97dbda4000 ---p 00021000 fd:00 4298776486                 /usr/lib64/libselinux.so.1
  0 kB	7f9
  7db4f7000-7f97db4fb000 r-xp 00000000 fd:00 4298779139                 /usr/lib64/python2.7/lib-dynload/cStringIO.so
  0 kB	7f97dc81e000-7f97dc81f000 rw-p 00000000 00:00 0
  0 kB	7f97d8545000-7f97d8557000 r-xp 00000000 fd:00 4298779138                 /usr/lib64/python2.7/lib-dynload/cPickle.so
  0 kB	7f97d9fd3000-7f97d9fd7000 r-xp 00000000 fd:00 4298779165                 /usr/lib64/python2.7/lib-dynload/timemodule.so
  0 kB	7f97d99c4000-7f97d9bc3000 ---p 00002000 fd:00 4298779147                 /usr/lib64/python2.7/lib-dynload/grpmodule.so
  0 kB	7f97daedb000-7f97daede000 r-xp 00000000 fd:00 4298779121                 /usr/lib64/python2.7/lib-dynload/_heapq.so
  0 kB	7f97ddfd4000-7f97ddfd7000 r-xp 00000000 fd:00 4298779119                 /usr/lib64/python2.7/lib-dynload/_functoolsmodule.so
  0 kB	7f97d8b67000-7f97d8b78000 r-xp 00000000 fd:00 4298779141                 /usr/lib64/python2.7/lib-dynload/datetime.so
  0 kB	7f97d7631000-7f97d7635000 r-xp 00000000 fd:00 4298776496                 /usr/lib64/libuuid.so.1.3.0
  0 kB	7f97dd59e000-7f97dd5a6000 r-xp 00000000 fd:00 4298779132                 /usr/lib64/python2.7/lib-dynload/_ssl.so
  0 kB	7f97dbfc0000-7f97dbfc2000 rw-p 00000000 00:00 0
  0 kB	7f97dd332000-7f97dd394000 r-xp 00000000 fd:00 4298776137                 /usr/lib64/libssl.so.1.0.1e
  0 kB	7f97d6e22000-7f97d7021000 ---p 00004000 fd:00 6442649369                 /usr/lib64/python2.7/site-packages/sqlalchemy/cresultproxy.so
  0 kB	7f97d95bb000-7f97d97ba000 ---p 0000b000 fd:00 4298779156                 /usr/lib64/python2.7/lib-dynload/parsermodule.so
  0 kB	7f97da3dd000-7f97da3e0000 r-xp 00000000 fd:00 4298779129                 /usr/lib64/python2.7/lib-dynload/_randommodule.so
  0 kB	7f97dddcf000-7f97dddd3000 r-xp 00000000 fd:00 4298779125                 /usr/lib64/python2.7/lib-dynload/_localemodule.so
  0 kB	7f97da7e5000-7f97da7ea000 r-xp 00000000 fd:00 4298779136                 /usr/lib64/python2.7/lib-dynload/binascii.so
  2 kB	7f97e490a000-7f97e4ac0000 r-xp 00000000 fd:00 4299921917                 /usr/lib64/libc-2.17.so
  3 kB	7f97d6955000-7f97d6a06000 r-xp 00000000 fd:00 4298777149                 /usr/lib64/libsqlite3.so.0.8.6
  4 kB	7f97d7428000-7f97d7429000 r--p 00002000 fd:00 6442649368                 /usr/lib64/python2.7/site-packages/sqlalchemy/cprocessors.so
  4 kB	7f97d7630000-7f97d7631000 rw-p 00006000 fd:00 4298779128                 /usr/lib64/python2.7/lib-dynload/_multiprocessing.so
  4 kB	7f97d95a8000-7f97d95a9000 r--p 00010000 fd:00 2147488545                 [...]
  /usr/lib64/python2.7/site-packages/OpenSSL/SSL.so
  16 kB	7f97d7c58000-7f97d7c5c000 rw-p 0001a000 fd:00 4298779115                 /usr/lib64/python2.7/lib-dynload/_ctypes.so
  16 kB	7f97dd32e000-7f97dd332000 rw-p 00000000 00:00 0
  16 kB	7f97dd9b6000-7f97dd9bb000 rw-p 0000f000 fd:00 4298779130                 /usr/lib64/python2.7/lib-dynload/_socketmodule.so
  16 kB	7f97dd593000-7f97dd597000 r--p 00061000 fd:00 4298776137                 /usr/lib64/libssl.so.1.0.1e
  16 kB	7f97e4cc0000-7f97e4cc4000 r--p 001b6000 fd:00 4299921917                 /usr/lib64/libc-2.17.so
  20 kB	7f97db2ea000-7f97db2ef000 rw-p 0000a000 fd:00 4298779149                 /usr/lib64/python2.7/lib-dynload/itertoolsmodule.so
  28 kB	7f97dd597000-7f97dd59e000 rw-p 00065000 fd:00 4298776137                 /usr/lib64/libssl.so.1.0.1e
  28 kB	7f97d95a9000-7f97d95b0000 rw-p 00011000 fd:00 2147488545                 /usr/lib64/python2.7/site-packages/OpenSSL/crypto.so
  40 kB	7f97daed1000-7f97daedb000 rw-p 0001c000 fd:00 4298779123                 /usr/lib64/python2.7/lib-dynload/_io.so
  48 kB	7f97dd322000-7f97dd32e000 rw-p 001d5000 fd:00 4298776134                 /usr/lib64/libcrypto.so.1.0.1e
  48 kB	7fff16e88000-7fff16ea9000 rw-p 00000000 00:00 0                          [stack]
  52 kB	7f97dccf3000-7f97dcd00000 r--p 000d0000 fd:00 4298778191                 /usr/lib64/libkrb5.so.3.3
  60 kB	7f97e59a7000-7f97e59b6000 rw-p 00000000 00:00 0
  104 kB	7f97dd308000-7f97dd322000 r--p 001bb000 fd:00 4298776134                 /usr/lib64/libcrypto.so.1.0.1e
  156 kB	03b92000-03bd4000 rw-p 00000000 00:00 0                                  [heap]
  220 kB	7f97e5969000-7f97e59a7000 rw-p 00179000 fd:00 4298778899                 /usr/lib64/libpython2.7.so.1.0
  532 kB	7f97e5b48000-7f97e5bcf000 rw-p 00000000 00:00 0
  768 kB	7f97e5a54000-7f97e5b17000 rw-p 00000000 00:00 0
  772 kB	7f97dabf4000-7f97dacb5000 rw-p 00000000 00:00 0
  22192 kB	025d2000-03b92000 rw-p 00000000 00:00 0                                  [heap]
  Total Pss: 25778 kB

  Being the maximum responsible python's heap (the tool doesn't show
  who's heap that is, but if I look manually it's /usr/bin/python2.7's
  heap).

  For reference, a bare python waiting on command line Pss is 2930kB,
  984kB due to python heap.

  memexplore can be found here: https://github.com/mangelajo/memexplore

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1524916/+subscriptions


References