V8's API is generally single-threaded and all cross-thread access to
Isolates must go through using v8::Locker.

-Michael

On Fri, Jun 7, 2024 at 11:42 AM Sam Cao <sjtucao...@gmail.com> wrote:

> Hi Dominik,
>
> Thank you for the suggestion. I prefer a feature request.
>
> Calling that API in the same thread might not be possible. In the use case
> I left, that thread is busy allocating memory so that there's no way of
> executing that API. Why do we want to know the heap statistics? Because
> that thread hangs and we want to know why. This is a typical use case in
> Java, C#, etc. where we rely on JVM / .Net runtime statistics collected by
> a troubleshooting thread.
>
> Thank you again and have a nice weekend,
> Sam
>
> On Friday, June 7, 2024 at 5:24:48 PM UTC+8 dinf...@chromium.org wrote:
>
>> Hi Sam,
>>
>> You should definitely file a feature request for that. I understand your
>> use case and I see how one could assume that this would work. I suppose the
>> behavior change comes from this CL in particular [0]. And that change was
>> made under the assumption that calls would be on the right thread. There
>> may be other (less obvious) issues with this method on concurrent threads
>> as well. So if we want to support concurrent usage we should check the rest
>> of the method as well and have some test coverage for this. Alternatively
>> you could also invoke that method on the right thread (e.g. through posting
>> a task) and let it report back the result as well.
>>
>> Cheers,
>> Dominik
>>
>> 0: https://chromium-review.googlesource.com/c/v8/v8/+/4946715
>>
>> On Friday, June 7, 2024 at 10:24:22 AM UTC+2 sjtuc...@gmail.com wrote:
>>
>>> Hi Dominik,
>>>
>>> I forgot to mention the OS is Windows 10 x86_64. Monitoring the heap
>>> statistics in another thread used to work well before this change.
>>>
>>> I wonder why this call has to be in the same thread. Consider V8 is used
>>> in an online service (Node.js). The service provider usually owns a
>>> dashboard showing the server farm statistics including the Node.js heap
>>> usage. I'm afraid the data has to be coming from another thread hitting the
>>> same V8 isolate via this call.
>>>
>>> For now, the Node.js v20.14.0 LTS (V8 v11.3.244.8) hasn't picked up this
>>> change, so this issue doesn't impact the majority of users. I removed this
>>> check in my private build and this API works as usual now.
>>>
>>> Please consider this feature as one of the key features in online
>>> services and find a better way to resolve it.
>>>
>>> Thank you,
>>> Sam
>>>
>>>
>>> On Friday, June 7, 2024 at 3:54:20 PM UTC+8 dinf...@chromium.org wrote:
>>>
>>>> Hi,
>>>>
>>>> I cannot reproduce this crash locally (neither on 12.5.227.6 nor on
>>>> tip-of-tree). I suspect what's going on here is that you are using
>>>> GetHeapStatistics from a second thread which is not supported. This likely
>>>> causes this particular CHECK failure. The fix for this would be to invoke
>>>> GetHeapStatistics on thread 1 as well.
>>>>
>>>> Cheers,
>>>> Dominik
>>>>
>>>>
>>>> On Friday, June 7, 2024 at 6:22:01 AM UTC+2 sjtuc...@gmail.com wrote:
>>>>
>>>>> Hi V8 Dev,
>>>>>
>>>>> I'd like to report a potential bug in ConcurrentMarking::RunMajor().
>>>>>
>>>>> *Fatal Error*
>>>>> #
>>>>> # Fatal error in , line 0
>>>>> # Check failed: !IsFreeSpaceOrFillerMap(map).
>>>>> #
>>>>> #
>>>>> #
>>>>> #FailureMessage Object: 00000083D21FF440
>>>>> ==== C stack trace ===============================
>>>>>   CrashForExceptionInNonABICompliantCodeRange [0x00007FFF4AA557BB+
>>>>> 1514667]
>>>>>   (No symbol) [0x00007FFF4A77D497]
>>>>>   (No symbol) [0x00007FFF4A820BBA]
>>>>>   CrashForExceptionInNonABICompliantCodeRange [0x00007FFF4AB234A1+
>>>>> 2357649]
>>>>>   CrashForExceptionInNonABICompliantCodeRange [0x00007FFF4AB3AB62+
>>>>> 2453586]
>>>>>   CrashForExceptionInNonABICompliantCodeRange [0x00007FFF4AA570A6+
>>>>> 1521046]
>>>>>   CrashForExceptionInNonABICompliantCodeRange [0x00007FFF4AA5A466+
>>>>> 1534294]
>>>>>
>>>>> *Reproduce*
>>>>>
>>>>>    1. Set max heap size to 8096
>>>>>    2. Start thread 1 and execute the following JS code.
>>>>>    var a = [];
>>>>>    for (let i = 0; i < 100000000; i++) {
>>>>>      a.push({test:'test'});
>>>>>    }
>>>>>    3. Start thread 2 and call v8Isolate->GetHeapStatistics()
>>>>>     periodically.
>>>>>
>>>>> There is a high chance that V8 will crash with the fatal error posted
>>>>> above.
>>>>>
>>>>> *Analysis*
>>>>> I reviewed the source code of 12.5.227.6 and found there is only one
>>>>> call to IsFreeSpaceOrFillerMap() inside ConcurrentMarking::RunMajor() as
>>>>> follows.
>>>>> [image: 01.png]
>>>>>
>>>>> It seems this check is not always valid when that V8 isolate is busy
>>>>> allocating memory. It used to be working well before this check was added.
>>>>>
>>>>> Please check this issue out.
>>>>>
>>>>> Thank you,
>>>>> Sam
>>>>>
>>>> --
> --
> v8-dev mailing list
> v8-dev@googlegroups.com
> http://groups.google.com/group/v8-dev
> ---
> You received this message because you are subscribed to the Google Groups
> "v8-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to v8-dev+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/v8-dev/09463827-7e16-459a-a12e-c470e5888e83n%40googlegroups.com
> <https://groups.google.com/d/msgid/v8-dev/09463827-7e16-459a-a12e-c470e5888e83n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
-- 
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-dev/CAH%2BmL5CXxwtTSddZfOUhafY7DYttMLAO9qdOmgn851tqr8EXPg%40mail.gmail.com.

Reply via email to