Yes, everyone gets what you're asking for. The problem is that V8's C++
code commonly allocates from the JavaScript heap. Every place where it does
that, the C++ code would need a path to handle allocation failure. It's
entirely possible to do, but it's a lot of work and hard to test.

-Kenton

On Sun, Dec 30, 2018 at 8:47 AM markt via v8-users <
v8-users@googlegroups.com> wrote:

> I was not suggesting that v8 be designed to recover from situations where
> the native process has actually run out of all available memory, I am
> suggesting that v8 should be designed to recover (in some way that does not
> terminate the process) from situations where the javascript code that may
> be executing is consuming more memory than what the javascript code was
> permitted to use, which may be *FAR* less than the amount of memory that is
> actually available on the computer.   The isolate that contains the badly
> behaved javascript code should be marked as having an irrecoverable error
> associated with it, and any further attempts to manipulate the isolate
> should behave as if that isolate has already been terminated.    This
> irrecoverable error could be detected by the embedder when it resumes
> control, and the embedder can recover from this situation with respect to
> the rest of its native process in its own way.  The isolate would remain
> unusable, but the native process would not crash.  Eventually, the embedder
> would have to simply dispose of the isolate, and start over if desired with
> a new one, if more javascript code execution is desired, reporting the out
> of memory situation as applicable to the situation, perhaps by blacklisting
> the script which caused the behavior until it can be manually vettted to
> ensure that the situation does not happen again.
>
> My point remains, if a process is genuinely consuming too much memory, the
> operating system will unceremoniously kill the process anyways.  It is
> redundant at best to deliberately put this kind of logic into v8, and at
> worst renders v8 unusable for many situations.
>
> On Tuesday, December 4, 2018 at 1:01:36 PM UTC-8, Kenton Varda wrote:
>>
>> On Tue, Dec 4, 2018 at 12:40 PM markt via v8-users <
>> v8-u...@googlegroups.com> wrote:
>>
>>> To be perfectly honest, this seems rather pointless to terminate the
>>> process in this way.
>>>
>>> If, in fact, a process were legitimately using too much memory, the
>>> underlying operating system should be entirely capable of killing it
>>> anyways.  Having v8 do so of its own accord instead of simply returning an
>>> error condition that could be detected by an embedded application as an out
>>> of memory condition with the v8 engine seems superfluous at best, and
>>> completely unusable for many purposes at worst.
>>>
>>
>> I don't think that's the point. The point is that many code paths in V8
>> are not prepared to handle memory allocation failures. Gracefully handling
>> allocation errors often requires significantly more code, tests, and
>> general engineering effort, which would be totally wasted for Chrome's use
>> case since Chrome will just terminate the process anyway.
>>
>> Personally I would much prefer if V8 did handle these cases but it makes
>> plenty of sense why they don't.
>>
>> -Kenton
>>
>>
>>>
>>>
>>>
>>> On Tuesday, October 24, 2017 at 1:44:59 PM UTC-7, Ben Noordhuis wrote:
>>>>
>>>> On Tue, Oct 24, 2017 at 10:17 PM, 'Kenton Varda' via v8-users
>>>> <v8-u...@googlegroups.com> wrote:
>>>> > Hi v8-users,
>>>> >
>>>> > It appears that in some cases V8 will abort the process when it runs
>>>> out of
>>>> > heap space rather than throw a JS exception. The behavior can be
>>>> overridden
>>>> > by registering an OOM callback, but if that callback returns without
>>>> > aborting, it seems V8 promptly crashes.
>>>> >
>>>> > It seems like some code paths are designed to handle OOM gracefully,
>>>> but
>>>> > others aren't.
>>>> >
>>>> > For my use case, it's pretty important that a malicious script cannot
>>>> cause
>>>> > the process to abort, since our processes are multi-tenant. Ideally
>>>> OOM
>>>> > would throw an exception, but terminating the isolate is also
>>>> acceptable, as
>>>> > long as other isolates can keep going.
>>>> >
>>>> > Is there any way to accomplish this?
>>>>
>>>> No. Graceful handling of OOM conditions is not one of V8's design
>>>> goals.
>>>>
>>>> > For example, what if I compile with C++ exceptions enabled, and have
>>>> my OOM
>>>> > handler throw an exception, hence unwinding the stack back to where I
>>>> > entered V8. Then, I promptly destroy the isolate. Would that work?
>>>>
>>>> No.  It would end very badly.  V8 is not exception-safe.
>>>>
>>>> > Or, is there some trick to making V8 less crashy on OOM, aside from
>>>> going
>>>> > through and fixing all the code paths that crash (which probably
>>>> isn't
>>>> > feasible for me)?
>>>>
>>>> No tricks, no.  The best you can do is monitor memory usage and call
>>>> `Isolate::TerminateExecution()` when it gets too high but that won't
>>>> be 100% reliable; OOM conditions in C++ code will still be fatal.
>>>>
>>>> Probably not the answers you were hoping for but there it is.
>>>>
>>> --
>>> --
>>> v8-users mailing list
>>> v8-u...@googlegroups.com
>>> http://groups.google.com/group/v8-users
>>> ---
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "v8-users" group.
>>> To unsubscribe from this topic, visit
>>> https://groups.google.com/d/topic/v8-users/vKn1hVs8KNQ/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to
>>> v8-users+u...@googlegroups.com.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>> --
> --
> v8-users mailing list
> v8-users@googlegroups.com
> http://groups.google.com/group/v8-users
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "v8-users" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/v8-users/vKn1hVs8KNQ/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> v8-users+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to