Мне нужно иметь тысячи изолятов внутри V8. Но я столкнулся с странной проблемой с памятью, когда у меня есть некоторое количество свободной памяти, но v8 выдает сообщения об ошибках OOM.Сколько изолятов v8 можно создать?
Например,
В данном конкретном случае, вы можете увидеть у нас еще есть некоторый RAM когда V8 выдает эту ошибку. Номер 2047 - номер итератора. Таким образом, в основном код выглядит так:
for(int i = 0; i < 3000; i++) {
std::cout << i << std::endl;
new Isolate(params);
}
Возможно, мне нужно увеличить ограничение размера стека. Я уже установил 16Mb. И все еще есть эта проблема. htop показывает только 4 потока для этого процесса. Поэтому я не думаю, что проблема с потоками.
Внутри класса v8 я
this->_maxRAMAvailable = 8; // 8Gb in my case
int maxOldSpaceMb = this->_maxRAMAvailable * 1024;
int maxSemiSpaceMb = 512;
int maxExecutableSizeMb = 512;
v8::V8::InitializeICUDefaultLocation(argv[0]);
v8::V8::InitializeExternalStartupData(argv[0]);
this->_platform = v8::platform::CreateDefaultPlatform();
this->_create_params.array_buffer_allocator =
v8::ArrayBuffer::Allocator::NewDefaultAllocator();
const uint64_t physical_memory = this->_maxRAMAvailable * 1024 * 1024 * 1024;
const uint64_t virtual_memory_limit = 0;
this->_create_params.constraints.ConfigureDefaults(physical_memory, virtual_memory_limit);
this->_create_params.constraints.set_max_old_space_size(maxOldSpaceMb);
this->_create_params.constraints.set_max_semi_space_size(maxSemiSpaceMb);
это -> _ create_params.constraints.set_max_executable_size (maxExecutableSizeMb);
v8::V8::InitializePlatform(this->_platform);
v8::V8::Initialize();
Большое спасибо!
Боюсь, что мы не можем угадать ваш код. И ваши намерения. – Ven
Imaging Я просто делаю auto isolate = v8 :: Isolate :: New (this -> _ create_params); в петле. И это не удается, даже если у меня 20% памяти. Зачем ? –