rctl memory usage count and swap

Artem Kuchin artem at artem.ru
Thu Jun 2 19:21:01 UTC 2016


Hello

freebsd 10.2

I have apache in jail, each apache in running under its own user, so, i 
have many user in one jail

and many httpd processed started under that users.

I wanted to limit memory usage per user and disable swap for all of them.

So, i use rctl

I try such rules

vmemoryuse:log=1g
swapuse:log=0

Now two problem appeared immediately

1) VMEMORYUSE

I see messages in log file like this

kernel: rctl: rule "user:17032:vmemoryuse:log=1073741824" matched by pid 
40360 (httpd), uid 17032, jail XXX

So, it seems like user overused memory, i check

# rctl -u user:17032
cputime=37
datasize=368640
stacksize=0
coredumpsize=0
memoryuse=329007104
memorylocked=0
maxproc=10
openfiles=320
vmemoryuse=4147863552
pseudoterminals=0
swapuse=6148096
nthr=9
msgqqueued=0
msgqsize=0
nmsgq=0
nsem=0
nsemop=0
nshm=0
shmsize=0
wallclock=28270
pcpu=0

Aha, seems like the user used 4G of virtual memory and 329M of real memory

No lets see its processes

17032  2213     1   0  21  0 446372  27808 select SsJ   - 0:02.47 
/usr/local/sbin/httpd
17032 30173  2213   0  20  0 450468  39644 accept IJ    -  0:00.29 
/usr/local/sbin/httpd
17032 39611  2213   0  20  0 450468  37160 accept IJ    -  0:00.06 
/usr/local/sbin/httpd
17032 39612  2213   0  20  0 450468  36712 accept IJ    -  0:00.05 
/usr/local/sbin/httpd
17032 39613  2213   0  20  0 450468  36608 accept IJ    -  0:00.06 
/usr/local/sbin/httpd
17032 39614  2213   0  20  0 450468  36624 accept IJ    -  0:00.05 
/usr/local/sbin/httpd
17032 39617  2213   0  20  0 450468  37144 accept IJ    -  0:00.03 
/usr/local/sbin/httpd
17032 39618  2213   0  20  0 450468  36268 accept SJ    -  0:00.04 
/usr/local/sbin/httpd
17032 39619  2213   0  20  0 450468  36432 accept IJ    -  0:00.05 
/usr/local/sbin/httpd
17032 39621  2213   0  20  0 450468  36332 accept IJ    -  0:00.04 
/usr/local/sbin/httpd
17032 39623  2213   0  20  0 450468  36988 accept IJ    -  0:00.06 
/usr/local/sbin/httpd
17032 39624  2213   0  20  0 450468  36212 accept IJ    -  0:00.03 
/usr/local/sbin/httpd
17032 39626  2213   0  20  0 450468  36544 accept IJ    -  0:00.04 
/usr/local/sbin/httpd
17032 39627  2213   0  20  0 450468  37360 accept IJ    -  0:00.06 
/usr/local/sbin/httpd
17032 39628  2213   0  20  0 450468  36772 accept IJ    -  0:00.04 
/usr/local/sbin/httpd
17032 39633  2213   0  20  0 450468  34972 accept IJ    -  0:00.04 
/usr/local/sbin/httpd
17032 39634  2213   0  20  0 450468  36104 accept IJ    -  0:00.03 
/usr/local/sbin/httpd
17032 39635  2213   0  20  0 450468  35784 accept IJ    -  0:00.03 
/usr/local/sbin/httpd
17032 39637  2213   0  20  0 450468  36232 accept IJ    -  0:00.04 
/usr/local/sbin/httpd
17032 39638  2213   0  20  0 450468  36620 accept IJ    -  0:00.04 
/usr/local/sbin/httpd
17032 39645  2213   0  20  0 450468  36084 accept IJ    -  0:00.04 
/usr/local/sbin/httpd
17032 39649  2213   0  20  0 450468  36356 accept SJ    -  0:00.04 
/usr/local/sbin/httpd
17032 39652  2213   0  20  0 450468  36156 accept SJ    -  0:00.04 
/usr/local/sbin/httpd
17032 39653  2213   0  20  0 450468  35436 accept SJ    -  0:00.03 
/usr/local/sbin/httpd
17032 39655  2213   0  20  0 450468  37752 accept SJ    -  0:00.04 
/usr/local/sbin/httpd
17032 39657  2213   0  20  0 450468  35664 accept IJ    -  0:00.03 
/usr/local/sbin/httpd
17032 39661  2213   0  20  0 450468  36228 accept SJ    -  0:00.04 
/usr/local/sbin/httpd

As you see the virtual memory is 100% shared and RSS is at most 930M

Where rctl gets its number?

memoryuse=329007104
vmemoryuse=4147863552

2) swapuse:log=0

This rule create strange problems (when used with deny)

Jun  2 20:24:57 omni kernel: rctl: rule "user:17094:swapuse:log=0" 
matched by pid 27553 (httpd), uid 17094, jail XXXX
Jun  2 20:24:57 omni kernel: kern.ipc.maxpipekva exceeded; see tuning(7)

As you see from rctl -u  it shows

swapuse=6148096

but!

# swapinfo
Device          1K-blocks     Used    Avail Capacity
/dev/mirror/swap   4194300        0  4194300     0%

So, not swap is really used

But even if i do swapuse:log=300M i get the same error

And what maxpopekva has to do with it?

Is rctl really usable in 10.2 ?




More information about the freebsd-questions mailing list