-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

John,

On 7/6/20 16:12, john.e.gr...@wellsfargo.com.INVALID wrote:
> Chris,
>> John,
>>
>> On 7/6/20 11:48, john.e.gr...@wellsfargo.com.INVALID wrote:
>>> Chris,
>>>
>>>
>>>> -----Original Message----- From: Christopher Schultz
>>>> <ch...@christopherschultz.net> Sent: Monday, July 06, 2020
>>>> 10:21 AM To: Tomcat Users List <users@tomcat.apache.org>
>>>> Subject: [OT] Trying to determine the minimum heap required
>>>> for an operation
>>>>
>>> All,
>>>
>>> Definitely off-topic, but it's the kind of weird thing someone
>>> here might have experience with.
>>>
>>> I have an offline operation I'm considering bringing "inside"
>>> my web-based application. My only concern is memory usage: it
>>> requires that a bunch of data be loaded from a db into memory
>>> and then analyzed. It doesn't take long to execute -- maybe 10
>>> seconds or so, so the memory can be released back to the rest
>>> of the application.
>>>
>>> I've instrumented the command-line process with a thread which
>>> runs every .5sec and captures the used-memory, maintaining a
>>> high-water mark and reporting it after the whole operation is
>>> done. The first time I ran it (with no specific JVM
>>> memory-related settings), it reported that the high-water mark
>>> was ~450MiB.
>>>
>>> I figured that was higher than necessary, and probably just
>>> represented a lazy GC with loads of memory, so I constrained
>>> the process using -Xmx64M. That resulted in a 16MiB high-water
>>> mark. I tried again with -Xmx8M and the high-water mark became
>>> 5MiB.
>>>
>>> Is there a particularly good way to force the GC to be as
>>> aggressive as possible to see how low I can go, or should I
>>> just keep playing-around with the -Xmx setting.
>>>
>>> Another option is to serialize my in-memory structure to the
>>> disk to get a sense of the size in-memory, though it's really
>>> not the same -- it will at least get me in the right ballpark.
>>>
>>> Any suggestions?
>>>
>>> Thanks, -chris
>>>>
>>>> -------------------------------------------------------------------
- --
>>>>
>>>>
>>
>>>>
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>> For additional commands, e-mail:
>>>> users-h...@tomcat.apache.org
>>>
>>>
>>> I guess I’m that person with the weird experiences.
>>>
>>> Is memory or CPU in short supply?  If not, I don't think you'll
>>> have
>> a problem.  This isn't 1997 anymore.  I do think you should run a
>> realistic load test, however.
>>
>> No specific problem exists, but this is a multi-user web
>> application. Usually somewhere around 500 - 1000 users logged-in
>> at once. Session size is typically quite low -- only a handful of
>> small objects present with lots of sharing of "large" objects and
>> structures. Heap size is set to max 1GiB on each server and
>> memory usage shows a beautiful sawtooth pattern hovering around
>> ~400MiB for days at a time.
>>
>> I will certainly limit the number of these operations that can
>> occur at once, and they should be relatively rare. My test
>> example was using a small data set, but the size of the data-set
>> varies wildly with the client, so I have to be careful for the
>> larger ones.
>>
>> Busting the heap isn't something I'd like to have happen.
>>
>>> To me the most important GC metric is time spent per
>> minute/hour/etc.  The next most important metric is individual
>> pause durations.  Through testing you'll see what those numbers
>> are.  I work with some large apps that have multi-GB heaps and
>> it's rare to see GC time being over 1-2%.  IOW, 600-1200ms per
>> minute.  Often it's a fraction of a percent. With those small
>> numbers you're talking about, I don't think you'll have any
>> trouble in this area unless the server is very heavily loaded.
>>
>> Actually, I'm not super concerned about performance of the GC
>> itself. I was just wondering if there was a way to ask the JVM
>> "if you *had* to accomplish this task with the smallest possible
>> heap, what would it be?"
>>
>>> Be sure to enable verbose GC.  In java 8, it's something like
>>> this:
>>>
>>> -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
>>> -XX:+PrintGCDateStamps
>> - -Xloggc:/path/to/gc.log
>>>
>>> Run tests with and without the changes.  You can analyze the GC
>>> output with tools like GCEasy and GCViewer.
>> Sure.
>>
>> Again, I'm more concerned with the overhead that will be required
>> for a particular operation, so I can predict when running such an
>> operation might end up endangering the application server's heap
>> -- and therefore the logged-in users.
>>
>> Theoretically, if the thread hits a heap-full error, the thread
>> will experience an OOME, release it's (temporary) large object
>> tree, and the GC will be able to recover, but after an OOME it's
>> never a great plan to trust the JVM for very long.
>>
>> - -chris -----BEGIN PGP SIGNATURE----- Comment: Using GnuPG with
>> Thunderbird - https://www.enigmail.net/
>>
>> iQIzBAEBCAAdFiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAl8DTR4ACgkQHPApP
>> 6U8
>> pFiAkQ//cWQ/CL35LJcRIervUhnByPXg/TN1MhfOl66zXx4upJcIpPXgBuIkigbe
>> 9d9y/jFnRCyHsFodSEsjtT/q2CxD7k30DIAwRrTaGxzrz60QlD/+t8l3getT9xot
>> s0bAxvlpjZTvvhTtpAAv9hkSwJuMxxECksbqmYXaO/rtoBu/N9R8MCjPz4cihTa
>> B dLZZ32Ibhg7tn0VBhwaJYz8AlYK3qJLUfISBU8h3WXXpmrbw48wDmkMYtdwU
>> PcoL
>> aWw9UbOolLj0EZiCh4QjCXb404pLbqTe0Hbuy7FBNv1rB8RDOFj8vWo8eotshqi
>> J
>> c8fVY5jxHV9dqc0S2A6cCjoTrwsvUPimiykhCnrvCUpnif1I90H2b181sCtEyIyV
>> XTADe/ore5K07DJGhFSenAYBvrU19TuiRL7NGH980DndYGns8woQ9BvR4WHE
>> BDuf 15qkHdwBtjD6o5D6X5Mmyf6x6WbafhI6gb3hBPUGMEtxAhgvHNmIGX7+QV
>> QHdtat
>> 9+QSuu2viArftOKHfFpM85O25QuyfkPi4nGz1S86vcgd6q+N1Lk/qVTyJo2VJSm
>> g Jq6DEEko/YaLIujgjU6rQdPoF8oeRAtvWXsnQ3Yw/x7Wv3rRH4l3NMhwv139nC
>> Pb 2Jt/LYAC4v48O1COt0huuCAu0dWIJqky3VIeIcI9lOpAZ1Jm3Do= =svYj
>> -----END PGP SIGNATURE-----
>>
>> ---------------------------------------------------------------------
>>
>>
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>
> What did you mean by "limit the number of these operations that
> can occur at once?"  Initially I got the impression that this is
> just one batch operation that will run every minute, hour, or
> something like that.
No. This is something that might be user-initiated. Hence my concern
for it to be using a lot of heap space. I don't want 500 users all
requesting this heavy operation at once, so the requests will be
serialized and/or queued.

> As a starting point, you could take the heap size of your existing
> "external" operation and add it to your existing web traffic jvm.

The current external operation has no explicit limits, so it ggets
like a 4GiB heap or whatever the default when there's plenty of RAM to
go around. This exercise was intended to determine that required size.

I've been playing-around with some large client data sets and it looks
like one of the the largest (currently) requires 48MiB to chew-through
their data. It also took two hours. So I'm starting to think that
bringing this "inside" my web application is not a good idea: the web
application will just be used to kick-off the process and maybe
observe its progress, but the actual data-processing must occur elsewher
e.

> I don't want to write a treatise on how to tune the heap size, but
> Charlie Hunt and Binu John's Java Performance book covers GC well.
> It's not rocket surgery.  You can do a lot with a few basic
> principles.

Again, I wasn't looking to tune my GC. I was looking to find out how
much memory a process "really" takes so that I can make sure I don't
hose my existing process.

But I think the point, now, is moot as I'm very unlikely to move this
process inside my web application.

Thanks!

- -chris
-----BEGIN PGP SIGNATURE-----
Comment: Using GnuPG with Thunderbird - https://www.enigmail.net/

iQIzBAEBCAAdFiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAl8Dn3oACgkQHPApP6U8
pFiKuA//Wnn/LmgbNzf7xEKTRdgyLA6O8cAUKpD8eBB8iQIh3gSfvq0ZVZ7c+WCZ
NhLjSu4d0V44oc8xhz/k2GDEIdjgjCh71K9nWVuDUQL1p5R8N9wY8gcDQQ7OpKuO
B08WeWay6KMc1XzExot0WmVfL1qI0dEvgZA8ycIDQlDjPfoCwoQIQJoepfpYWXxi
rnOsZE7pugmnSJ2w193YJYHZcdFrquFgIXakDprAjaTkg51xALoOyH5gD47+8jBc
q5fw4VJUwxNTnKjiRPu+yjEmCxCvScNE0yFwY14fzoDmcr5FdMkzJOzhnvD1aZbV
k3oyjRJxSw+5/rgAki0B3xFCqMRXfwZQpGhPqN38yNTb1j3WGjfUs6aDTWPqGZXU
jeqYCL1MPLcvi3zClkWNdFIcS5Zam+/JSteKGadgFsAvsKOGsnot7CqUv1VKBa5W
pW23U0Zgc+M9b5XcANhGlDil4Xh90QcxBp0/koR0Bz4fxMw2llVCA2efNcnerYD4
UKcC66ZW7sd4qmf8Fjb/Dh6s32p1F3WvL8WZNUDlezyD8he+z0keF3C1haJ0yZAt
axggn0E+aUGMjUUBm70ySlg3ihF/EJJZKVOLfSBLibmnjXrxB7BuluXjFFbTT6H5
mbgRbk27uiNcvRbJzeNGAOKbhq7+S1BdpVamE0ZAfjPwPMSnOlE=
=/CuV
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to