Могу ли я каким-то образом защитить всю машину Windows от остановки, если моя 64-разрядная программа потребляет всю память? [Дубликат]

Ваш Javascript будет выполняться на клиенте, а не на сервере. Это означает, что foo не оценивается на стороне сервера, и поэтому его значение не может быть записано в файл на сервере.

Лучший способ подумать об этом процессе - это как будто вы генерируя текстовый файл динамически. Текст, который вы генерируете, становится исполняемым кодом после того, как браузер интерпретирует его. Только то, что вы размещаете между тегами <?php, оценивается на сервере.

Кстати, создание привычки встраивать случайные фрагменты PHP-логики в HTML или Javascript может привести к серьезному запутанному коду. Я говорю от болезненного опыта.

43
задан Ferruccio 10 October 2008 в 21:27
поделиться

4 ответа

Использовать Windows Объекты работы . Задания похожи на группы процессов и могут ограничить использование памяти и приоритет процесса.

32
ответ дан Adam Mitz 23 August 2018 в 16:12
поделиться

В зависимости от ваших приложений может быть проще ограничить память, которую использует интерпретатор языка. Например, с помощью Java вы можете установить объем ОЗУ, который будет выделен JVM.

В противном случае его можно установить один раз для каждого процесса с помощью API Windows

SetProcessWorkingSetSize Функция

4
ответ дан Eric 23 August 2018 в 16:12
поделиться
  • 1
    Это фактически не ограничивает объем памяти, который процесс может совершить, только количество, которое вызывается в любое конкретное время. Он может работать большую часть времени для оригинального плаката, но правильный ответ на ограничение объема общей памяти, которую может использовать процесс, - использовать объект задания. – Stephen Martin 17 August 2009 в 21:05

Используйте инструмент Application Verifier (AppVerifier) ​​ от Microsoft.

В моем случае мне нужно смоделировать память, которая больше не доступна, поэтому я сделал следующее в инструменте:

  1. Добавлено мое приложение
  2. Unchecked Basic
  3. Проверено Моделирование с низким ресурсом Изменено TimeOut до 120000 - мое приложение будет нормально работать в течение 2 минут, прежде чем что-либо вступит в силу , Изменен HeapAlloc до 100 - 100% вероятность ошибки распределения кучи Устанавливает стеки в true - стек больше не сможет увеличиться
  4. Сохранить
  5. Запустить мое приложение

Через 2 минуты моя программа больше не могла выделять новую память, и я смог увидеть, как все было обработано.

21
ответ дан Jesse Vogt 23 August 2018 в 16:12
поделиться

Невозможно сделать это, о котором я знаю, хотя мне очень интересно читать, если у кого-то есть хороший ответ. Я думал о добавлении чего-то подобного в одно из приложений, созданных моей компанией, но не нашел хорошего способа это сделать.

Единственное, о чем я могу думать (хотя и не прямо в точке), это что я считаю, что вы можете ограничить общее использование памяти для приложения COM + в Windows. Это потребует, чтобы приложение было написано для запуска в COM +, конечно, но это самый близкий способ, о котором я знаю.

Рабочий набор данных хорош (Job Objects также управляет рабочими наборами), но это не так. общее использование памяти, только реальное использование памяти (выгружается) в любой момент времени. Он может работать на то, что вы хотите, но afaik не ограничивает общую выделенную память.

3
ответ дан Nick 23 August 2018 в 16:12
поделиться
  • 1
    JobObjects также может управлять максимальным количеством виртуальной памяти, которое может выполнить задание или процесс. Проверьте SetInformationJobObject и структуру JOBOBJECT_EXTENDED_LIMIT_INFORMATION. – Stephen Martin 17 August 2009 в 20:59
Другие вопросы по тегам:

Похожие вопросы: