Как предотвратить процесс Tomcat (Java8), который был убит OOM?

Как уже намечено, isin требует, чтобы столбцы и индексы были одинаковыми для соответствия. Если совпадение должно быть только в содержимом строки, одним из способов получить маску для фильтрации присутствующих строк является преобразование строк в индекс (Multi):

In [77]: df1 = pandas.DataFrame(data = {'col1' : [1, 2, 3, 4, 5, 3], 'col2' : [10, 11, 12, 13, 14, 10]})
In [78]: df2 = pandas.DataFrame(data = {'col1' : [1, 3, 4], 'col2' : [10, 12, 13]})
In [79]: df1.loc[~df1.set_index(list(df1.columns)).index.isin(df2.set_index(list(df2.columns)).index)]
Out[79]:
   col1  col2
1     2    11
4     5    14
5     3    10

Если индекс следует учитывать, set_index имеет аргумент ключевого слова для добавления столбцов к существующему индексу. Если столбцы не совпадают, список (df.columns) можно заменить спецификациями столбцов для выравнивания данных.

pandas.MultiIndex.from_tuples(df<N>.to_records(index = False).tolist())

можно альтернативно использовать для создания индексов, хотя я сомневаюсь, что это более эффективно .

1
задан tjm1706 13 July 2018 в 17:57
поделиться

2 ответа

Сначала убедитесь, что oomkill не запускается другим процессом в системе или что сервер не перегружен другими процессами. Возможно, Tomcat несправедливо нацелен на oomkill, когда какой-то другой жадный процесс является виновником.

Куча должна быть установлена ​​как максимальный размер (-Xmx) меньше физической памяти на сервере. Если это больше, чем это, то пейджинг приведет к отчаянной производительности при сборе мусора.

Если это вызвано тем, что метапроцесс растет неограниченным образом, вам нужно выяснить, почему это происходит. Простое установление максимального размера metaspace вызовет ошибку outofmemory, как только вы достигнете установленного вами предела. И повышение лимита будет бессмысленным, потому что в конце концов вы попадете в любой более высокий лимит, который вы установили.

Запустите приложение и перед его сбоем (не легко, конечно, но вам нужно судить об этом), убить -3 тотальный процесс. Затем проанализируйте кучу и попытайтесь выяснить, почему metaspace растет. Обычно это вызвано динамической загрузкой классов. Это то, что делает ваше приложение? Скорее всего, это некоторые рамки, которые делают это. (Убийца Nb убивает -9 процесс tomcat, и после этого вы не сможете диагностировать, поэтому вам нужно разрешить запуск приложения и вмешаться до того, как это произойдет).

Проверьте также это вопрос - есть интригующий ответ, в котором утверждается, что непонятное исправление для параметра привязки XML очистило проблему (очень сомнительно, но, возможно, стоит попробовать) java8 «java.lang.OutOfMemoryError: Metaspace»

2
ответ дан Dick Chesterwood 17 August 2018 в 12:18
поделиться
1
ответ дан tjm1706 6 September 2018 в 09:02
поделиться
Другие вопросы по тегам:

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