Как у меня вынуждаю программу, казаться, закончиться память?

Свойство конфигурации называют hibernate.hbm2ddl.auto

В нашей среде разработки, которую мы устанавливаем hibernate.hbm2ddl.auto=create-drop, чтобы отбросить и создать чистую базу данных каждый раз, когда мы развертываемся, так, чтобы наша база данных была в известном состоянии.

В теории, можно установить hibernate.hbm2ddl.auto=update для обновления базы данных с изменениями в модели, но я не положил бы этому на производственной базе данных. Более ранняя версия документации сказала, что это было экспериментально, по крайней мере; я не знаю текущего статуса.

Поэтому для нашей производственной базы данных, не устанавливайте hibernate.hbm2ddl.auto - значение по умолчанию не должно вносить изменения базы данных. Вместо этого мы вручную создаем сценарий обновления DDL SQL, который применяет изменения от одной версии до следующего.

29
задан Dykam 4 August 2009 в 19:40
поделиться

9 ответов

Попробуйте перевернуть вопрос и спросить, как ограничить объем памяти, который ОС позволит вашему процессу использовать.

Попробуйте заглянуть в http: // ss64. com / bash / ulimit.html

Попробуйте сказать: ulimit -v

Вот еще одна ссылка, которая немного устарела, но дает немного больше информации: http://www.network-theory.co.uk/docs/gccintro/gccintro_77.html

31
ответ дан 28 November 2019 в 01:24
поделиться

Один из способов - написать оболочку для malloc ().

static unsigned int requested =0;

void* my_malloc(size_tamount){

   if (requested + amount < LIMIT){
       requested+=amount;
       return malloc(amount);
   }

   return NULL
}

Вы можете использовать #define для перегрузки malloc.

Как заявляет GMan, вы можете перегрузить операторы new / delete также (для случая C ++).

Не уверен, что это лучший способ или то, что вы ищете

9
ответ дан 28 November 2019 в 01:24
поделиться
  • Какая ОС? Для Unix см. Ulimit -d / limit datasize в зависимости от вашей оболочки (sh / csh).

  • Вы можете написать оболочку для malloc, которая возвращает ошибку в нужной вам ситуации. В зависимости от вашей ОС вы можете заменить ее на версию реализации.

5
ответ дан 28 November 2019 в 01:24
поделиться

Переопределить новые и новые [].

void* operator new(size_t s)
{
}
void* operator new[](size_t s)
{
}

Поместите свой собственный код в фигурные скобки, чтобы выборочно умереть после X вызовов нового. Обычно вы вызываете malloc, чтобы выделить память и вернуть ее.

3
ответ дан 28 November 2019 в 01:24
поделиться

Это зависит от вашей платформы. Например, это может быть достигнуто программно на Unix-подобных платформах с помощью setrlimit (RLIMIT_DATA, ...) .

EDIT :

В этом случае также может быть полезен ресурс RLIMIT_AS а также.

3
ответ дан 28 November 2019 в 01:24
поделиться

Если вы хотите потратить деньги, есть инструмент под названием Holodeck от SecurityInnovations, который позволяет вам вносить ошибки в вашу программу (включая нехватку памяти). Приятно то, что вы можете включать и выключать что угодно по своему желанию. Я на самом деле не использовал его, поэтому я не знаю, можно ли с помощью инструмента запрограммировать ошибки в определенных точках. Я также не знаю, какие платформы поддерживаются ...

1
ответ дан 28 November 2019 в 01:24
поделиться

Однажды я учился в CS 1 (в C, да, да, не моя вина) попробуй это, и у него закончилась память:

int array[42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42][42]..... (42 dimensions);

, а затем он захотел узнать, почему это дает ошибки ...

2
ответ дан 28 November 2019 в 01:24
поделиться

Другой способ сделать это - использовать failmalloc , которая является разделяемой библиотекой, которая переопределяет malloc и т. Д., А затем терпит неудачу :-). Это дает вам контроль над тем, когда терпеть неудачу, и может быть заставлено отказывать случайным образом, каждый энный раз и т. Д.

Я сам не использовал его, но слышал хорошие вещи.

3
ответ дан 28 November 2019 в 01:24
поделиться

Насколько мне известно, в Linux malloc никогда не вернет нулевой указатель. Вместо этого будет вызван OOM Killer . Это, конечно, если вы не отключили OOM Killer. Некоторый поиск в Google должен дать результат.

Я знаю, что это не ваш настоящий вопрос, но он имеет отношение к тому, откуда вы пришли.

1
ответ дан 28 November 2019 в 01:24
поделиться
Другие вопросы по тегам:

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