Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Feb 2012 12:59:01 +0000
From:      Tom Evans <tevans.uk@googlemail.com>
To:        Luke Marsden <luke-lists@hybrid-logic.co.uk>
Cc:        freebsd-fs@freebsd.org, team@hybrid-logic.co.uk
Subject:   Re: Another ZFS ARC memory question
Message-ID:  <CAFHbX1JA9HdF59_NAXzy3R%2BZGN9CFrTWcbYq4ajBjvD_WTBTwA@mail.gmail.com>
In-Reply-To: <1330087470.13430.61.camel@pow>
References:  <1330081612.13430.39.camel@pow> <CAFHbX1KPW%2B4h2-LHE9rB0aVRqw%2BAzVDrjjVB2CCt=7T4JB8C3A@mail.gmail.com> <1330087470.13430.61.camel@pow>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Feb 24, 2012 at 12:44 PM, Luke Marsden
<luke-lists@hybrid-logic.co.uk> wrote:
> On Fri, 2012-02-24 at 12:21 +0000, Tom Evans wrote:
>> On Fri, Feb 24, 2012 at 11:06 AM, Luke Marsden
>> <luke-lists@hybrid-logic.co.uk> wrote:
>> > Hi all,
>> >
>> > Just wanted to get your opinion on best practices for ZFS.
>> >
>> > We're running 8.2-RELEASE v15 in production on 24GB RAM amd64 machines
>> > but have been having trouble with short spikes in application memory
>> > usage resulting in huge amounts of swapping, bringing the whole machin=
e
>> > to its knees and crashing it hard. =C2=A0I suspect this is because whe=
n there
>> > is a sudden spike in memory usage the zfs arc reclaim thread is unable
>> > to free system memory fast enough.
>> >
>> > This most recently happened yesterday as you can see from the followin=
g
>> > munin graphs:
>> >
>> > E.g. http://hybrid-logic.co.uk/memory-day.png
>> > =C2=A0 =C2=A0 http://hybrid-logic.co.uk/swap-day.png
>> >
>> > Our response has been to start limiting the ZFS ARC cache to 4GB on ou=
r
>> > production machines - trading performance for stability is fine with m=
e
>> > (and we have L2ARC on SSD so we still get good levels of caching).
>> >
>> > My questions are:
>> >
>> > =C2=A0 =C2=A0 =C2=A0* is this a known problem?
>> > =C2=A0 =C2=A0 =C2=A0* what is the community's advice for production ma=
chines running
>> > =C2=A0 =C2=A0 =C2=A0 =C2=A0ZFS on FreeBSD, is manually limiting the AR=
C cache (to ensure
>> > =C2=A0 =C2=A0 =C2=A0 =C2=A0that there's enough actually free memory to=
 handle a spike in
>> > =C2=A0 =C2=A0 =C2=A0 =C2=A0application memory usage) the best solution=
 to this
>> > =C2=A0 =C2=A0 =C2=A0 =C2=A0spike-in-memory-means-crash problem?
>> > =C2=A0 =C2=A0 =C2=A0* has FreeBSD 9.0 / ZFS v28 solved this problem?
>> > =C2=A0 =C2=A0 =C2=A0* rather than setting a hard limit on the ARC cach=
e size, is it
>> > =C2=A0 =C2=A0 =C2=A0 =C2=A0possible to adjust the auto-tuning variable=
s to leave more free
>> > =C2=A0 =C2=A0 =C2=A0 =C2=A0memory for spiky memory situations? =C2=A0e=
.g. set the auto-tuning to
>> > =C2=A0 =C2=A0 =C2=A0 =C2=A0make arc eat 80% of memory instead of ~95% =
like it is at
>> > =C2=A0 =C2=A0 =C2=A0 =C2=A0present?
>> > =C2=A0 =C2=A0 =C2=A0* could the arc reclaim thread be made to drop ARC=
 pages with
>> > =C2=A0 =C2=A0 =C2=A0 =C2=A0higher priority before the system starts sw=
apping out
>> > =C2=A0 =C2=A0 =C2=A0 =C2=A0application pages?
>> >
>> > Thank you for any/all answers, and thank you for making FreeBSD
>> > awesome :-)
>>
>> It's not a problem, it's a feature!
>>
>> By default the ARC will attempt to cache as much as it can - it
>> assumes the box is a ZFS filer, and doesn't need RAM for applications.
>> The solution, as you've found out, is to limit how much ARC can take
>> up.
>>
>> In practice, you should be doing this anyway. You should know, or have
>> an idea, of how much RAM is required for the applications on that box,
>> and you need to limit ZFS to not eat into that required RAM.
>
> Thanks for your reply, Tom! =C2=A0I agree that the ARC cache is a great
> feature, but for a general purpose filesystem it does seem like a
> reasonable expectation that filesystem cache will be evicted before
> application data is swapped, even if the spike in memory usage is rather
> aggressive. =C2=A0A complete server crash in this scenario is rather
> unfortunate.
>
> My question stands - is this an area which has been improved on in the
> ZFS v28 / FreeBSD 9.0 / upcoming FreeBSD 8.3 code, or should it be
> standard practice to guess how much memory the applications running on
> the server might need and set the arc_max boot.loader tweak
> appropriately? =C2=A0This is reasonably tricky when providing general pur=
pose
> web application hosting and so we'll often end up erring on the side of
> caution and leaving lots of RAM free "just in case".
>
> If the latter is indeed the case in the latest stable releases then I
> would like to update http://wiki.freebsd.org/ZFSTuningGuide which
> currently states:
>
> =C2=A0 =C2=A0 =C2=A0 =C2=A0FreeBSD 7.2+ has improved kernel memory alloca=
tion strategy and
> =C2=A0 =C2=A0 =C2=A0 =C2=A0no tuning may be necessary on systems with mor=
e than 2 GB of
> =C2=A0 =C2=A0 =C2=A0 =C2=A0RAM.
>
> Thank you!
>
> Best Regards,
> Luke Marsden
>

Hmm. That comment is really talking about that you no longer need to
tune vm.kmem_size.

I get what you are saying about applications suddenly using a lot of
RAM should not cause the server to fall over. Do you know why it fell
over? IE, was it a panic, a deadlock, etc.

FreeBSD does not cope well when you have used up all RAM and swap
(well, what does?), and from your graphs it does look like the ARC is
not super massive when you had the problem - around 30-40% of RAM?

Cheers

Tom



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFHbX1JA9HdF59_NAXzy3R%2BZGN9CFrTWcbYq4ajBjvD_WTBTwA>