<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>
      <blockquote type="cite">
        <pre wrap="">Marat/Fajar:  How many servers do you guys have running in production, and what are their characteristics (RAM, CPU, workloads, etc)?</pre>
      </blockquote>
      I have to admit I'm not running a farm; I administer a few, but
      they are all different depending on task. Still, even smallest has
      64GB RAM. In 2017 the 8GB is small even for user notebook IMO.<br>
    </p>
    <p>
      <blockquote type="cite">
        <pre wrap="">After digging into this a bit, it seems “top”, “top”, and “free” report similar swap usage, however, other tools report much less swap usage.</pre>
      </blockquote>
      Yes, this is known, they got confused in containers. Run them on
      host to produce more meaningful results.</p>
    <p>
      <blockquote type="cite">
        <pre wrap="">All that said, the real issue is to find out if one of our containers/processes has a memory leak (per Marat’s suggestion below).  Unfortunately, LXD does not provide an easy way to track per-container stats, thus we must “roll our own” tools.</pre>
      </blockquote>
    </p>
    <p>Here's a typical top output (on the host system with 19 LXC
      containers currently running):<br>
      <blockquote type="cite"><font size="-1"><tt>top - 16:00:01 up 12
            days, 10:35,  5 users,  load average: 0.67, 0.58, 0.61</tt><tt><br>
          </tt><tt>Tasks: 501 total,   2 running, 499 sleeping,   0
            stopped,   0 zombie</tt><tt><br>
          </tt><tt>%Cpu(s):  5.8 us,  1.4 sy,  0.0 ni, 91.5 id,  1.1
            wa,  0.0 hi,  0.2 si,  0.0 st</tt><tt><br>
          </tt><tt>KiB Mem : 65853268 total,   379712 free,  8100284
            used, 57373272 buff/cache</tt><tt><br>
          </tt><tt>KiB Swap: 24986931+total, 24782081+free,  2048496
            used. 56852384 avail Mem </tt><tt><br>
          </tt><tt><br>
          </tt><tt>  PID USER      PR  NI    VIRT    RES    SHR S  %CPU
            %MEM     TIME+
            COMMAND                                                       
             </tt><tt><br>
          </tt><tt> 6671 root      20   0 5450952 3.728g   1564 S   0.3 
            5.9  93:14.29
            qemu-system-x86                                               
             </tt><tt><br>
          </tt><tt> 6670 root      20   0 5411084 2.073g   1456 S   0.0 
            3.3  33:32.07
            qemu-system-x86                                               
             </tt><tt><br>
          </tt><tt> 6979 999       20   0 5251132 244532  19436 S   0.0 
            0.4 101:47.88
            drwcsd.real                                                   
             </tt><tt><br>
          </tt><tt> 4338 lxd       20   0 1968400 229004   8052 S   5.3 
            0.3 639:52.03
            mysqld                                                        
             </tt><tt><br>
          </tt><tt> 8135 root      20   0 6553852 198224   4280 S   0.0 
            0.3  41:52.66
            java                                                          
             </tt><tt><br>
          </tt><tt> 4231 root      20   0  150072  99596  99472 S   0.0 
            0.2   0:19.43 systemd-journal       </tt></font></blockquote>
      It shows all processes, including those running in containers
      (first 5 are). I sorted by RES/%RAM; in your case I'd also try
      sorting by VIRT. I don't know how to directly find process that
      occupies much swap, but most likely it will have high RES and VIRT
      values too. As soon as you find problem processes, it is trivial
      to find container they run in with ps -AFH or pstree -p on the
      host system. (Note, that user names and PIDs are different inside
      and outside of containers, don't rely on them.)</p>
    <p>I don't have much experience with LXD, but I suppose it's same in
      this aspect.<br>
    </p>
    <div class="moz-signature"><!-- signature start -->
      --<br>
      <br>
      With Best Regards,<br>
      Marat Khalili<br>
      <br>
      <!-- signature end --></div>
    <div class="moz-cite-prefix">On 15/07/17 18:48, Ron Kelley wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:D49EF31F-12DE-4221-A55D-8FF5B3496FFC@gmail.com">
      <pre wrap="">Thanks for the great replies.  

Marat/Fajar:  How many servers do you guys have running in production, and what are their characteristics (RAM, CPU, workloads, etc)?  I am trying to see if our systems generally align to what you are running.  Running without swap seems rather drastic and removes the “safety net” in the case of a bad program.  In the end, we must have all containers/processes running 24/7.

tldr;
----
After digging into this a bit, it seems “top”, “top”, and “free” report similar swap usage, however, other tools report much less swap usage.  I found the following threads on the ‘net which include simple scripts to look in /proc and examine swap usage per process:

<a class="moz-txt-link-freetext" href="https://stackoverflow.com/questions/479953/how-to-find-out-which-processes-are-swapping-in-linux">https://stackoverflow.com/questions/479953/how-to-find-out-which-processes-are-swapping-in-linux</a>
<a class="moz-txt-link-freetext" href="https://www.cyberciti.biz/faq/linux-which-process-is-using-swap">https://www.cyberciti.biz/faq/linux-which-process-is-using-swap</a> 

As some people pointed out, top/htop don’t accurately report the swap usage as they combine a number of memory fields together.  And, indeed, running the script in each container (looking at /proc) show markedly different results when all the numbers are added up.  For example, the “free” command on one of our servers reports 3G of swap in use, but the script that scans the /proc directory only shows 1.3G of real swap in use.  Very odd.

All that said, the real issue is to find out if one of our containers/processes has a memory leak (per Marat’s suggestion below).  Unfortunately, LXD does not provide an easy way to track per-container stats, thus we must “roll our own” tools.



-Ron




</pre>
      <blockquote type="cite">
        <pre wrap="">On Jul 15, 2017, at 5:11 AM, Marat Khalili <a class="moz-txt-link-rfc2396E" href="mailto:mkh@rqc.ru"><mkh@rqc.ru></a> wrote:

I'm using LXC, and I frequently observe some unused containers get swapped out, even though system has plenty of RAM and no RAM limits are set. The only bad effect I observe is couple of seconds delay when you first log into them after some time. I guess it is absolutely normal since kernel tries to maximize amount of memory available for disk caches.

If you don't like this behavior, instead of trying to fine tune kernel parameters why not disable swap altogether? Many people run it this way, it's mostly a matter of taste these days. (But first check your software for leaks.)

</pre>
        <blockquote type="cite">
          <pre wrap="">For example, our “server-4” machine shows 8G total RAM, 500MB free, 2.5G available, and 5G of buff/cache. Yet, swap is at 5.5GB and has been slowly growing over the past few days. It seems something is preventing the apps from using the RAM.
</pre>
        </blockquote>
        <pre wrap="">
Did you identify what processes all this virtual memory belongs to?

</pre>
        <blockquote type="cite">
          <pre wrap="">To be honest, we have been battling lots of memory/swap issues using LXD. We started with no tuning, but the app stack quickly ran out of memory. 
</pre>
        </blockquote>
        <pre wrap="">
LXC/LXD is hardly responsible for your app stack memory usage. Either you underestimated it or there's a memory leak somewhere.

</pre>
        <blockquote type="cite">
          <pre wrap="">Given all the issues we have had with memory and swap using LXD, we are seriously considering moving back to the traditional VM approach until LXC/LXD is better “baked”.
</pre>
        </blockquote>
        <pre wrap="">
Did your VMs use less memory? I don't think so. Limits could be better enforced, but VMs don't magically give you infinite RAM. 
-- 

With Best Regards,
Marat Khalili

On July 14, 2017 9:58:57 PM GMT+03:00, Ron Kelley <a class="moz-txt-link-rfc2396E" href="mailto:rkelleyrtp@gmail.com"><rkelleyrtp@gmail.com></a> wrote:
Wondering if anyone else has similar issues.

We have 5x LXD 2.12 servers running (U16.04 - kernel 4.4.0-57-generic - 8G RAM, 19G SWAP).  Each server is running about 50 LXD containers - Wordpress w/Nginx and PHP7.  The servers have been running for about 15 days now, and swap space continues to grow.  In addition, the kswapd0 process starts consuming CPU until we flush the system cache via "/bin/echo 3 > /proc/sys/vm/drop_caches” command.

Our LXD profile looks like this:
-------------------------
config:
  limits.cpu: "2"
  limits.memory: 512MB
  limits.memory.swap: "true"
  limits.memory.swap.priority: "1"
-------------------------


We also have added these to /etc/sysctl.conf
-------------------------
vm.swappiness=10
vm.vfs_cache_pressure=50
-------------------------

A quick “top” output shows plenty of available Memory and buff/cache.  But, for some reason, the system continues to swap out the app.  For example, our “server-4” machine shows 8G total RAM, 500MB free, 2.5G available, and 5G of buff/cache.  Yet, swap is at 5.5GB and has been slowly growing over the past few days.  It seems something is preventing the apps from using the RAM.


To be honest, we have been battling lots of memory/swap issues using LXD.  We started with no tuning, but the app stack quickly ran out of memory.  After editing the profile to allow 512MB RAM per container (and restarting the container), the kswapd0 issue happens.  Given all the issues we have had with memory and swap using LXD, we are seriously considering moving back to the traditional VM approach until LXC/LXD is better “baked”.


-Ron

lxc-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:lxc-users@lists.linuxcontainers.org">lxc-users@lists.linuxcontainers.org</a>
<a class="moz-txt-link-freetext" href="http://lists.linuxcontainers.org/listinfo/lxc-users">http://lists.linuxcontainers.org/listinfo/lxc-users</a>
_______________________________________________
lxc-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:lxc-users@lists.linuxcontainers.org">lxc-users@lists.linuxcontainers.org</a>
<a class="moz-txt-link-freetext" href="http://lists.linuxcontainers.org/listinfo/lxc-users">http://lists.linuxcontainers.org/listinfo/lxc-users</a>
</pre>
      </blockquote>
      <pre wrap="">
_______________________________________________
lxc-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:lxc-users@lists.linuxcontainers.org">lxc-users@lists.linuxcontainers.org</a>
<a class="moz-txt-link-freetext" href="http://lists.linuxcontainers.org/listinfo/lxc-users">http://lists.linuxcontainers.org/listinfo/lxc-users</a></pre>
    </blockquote>
    <br>
  </body>
</html>