Как я программно узнаю свое использование пространства PermGen?

Некоторые вещи, на которые следует обратить внимание, а также дать некоторые предпосылки:

  1. В большинстве сценариев микросервисы взаимодействуют через HTTP (протокол без сохранения состояния), и в результате глобальные транзакции / транзакции XA просто не применимы / невозможны. [ 112]
  2. Ровно однажды семантика невозможна, и вы должны пойти «хотя бы раз». Это означает, что все услуги должны быть идемпотентными.
  3. Один хороший пример того, почему невозможно достичь семантики «ровно один раз» при такой настройке, заключается в том, что HTTP-соединения очень часто теряются на обратном пути к клиенту. Это означает, что через POST состояние сервера изменилось, а клиент получил ошибку тайм-аута.
  4. Внутри границ микросервисов вы можете использовать их очень хорошо. Как вы упомянули Kafka, вы можете довольно легко потреблять (из 1 темы) и производить (до 1 или более тем) одну атомарную / все или ничего операцию (ровно семантику).
  5. Но если вы хотите, чтобы глобальные и долгосрочные транзакции между микросервисами, которые взаимодействуют через http, единственно возможный вариант (вы можете увидеть глобальные транзакции через http, если вы используете Google, но для производственной системы просто игнорируйте их), - это проектировать для возможной согласованности , Короче говоря, это означает, что нужно повторить навсегда для исправимых ошибок (это целая глава сама по себе) и выставить компенсирующие конечные точки или произвести компенсационные события, которые в конечном итоге исправят неисправимые ошибки. Посмотрите паттерн саг . Нараяна менеджер транзакций имеет хорошую поддержку Sagas и хорошее сравнение продуктов.
  6. Распределенные системы очень сложны, и у вас должна быть причина для такого решения. Если вы будете распределены, то операции, которые ваш монолит может безопасно делегировать вашему менеджеру транзакций, должны будут выполняться разработчиком / архитектором: -).

25
задан Simon Nickerson 30 March 2009 в 14:00
поделиться

2 ответа

Можно использовать что-то вроде этого:

Iterator<MemoryPoolMXBean> iter = ManagementFactory.getMemoryPoolMXBeans().iterator();
while (iter.hasNext())
{
    MemoryPoolMXBean item = iter.next();
    String name = item.getName();
    MemoryType type = item.getType();
    MemoryUsage usage = item.getUsage();
    MemoryUsage peak = item.getPeakUsage();
    MemoryUsage collections = item.getCollectionUsage();
}

Это даст Вам всем типы памяти. Вы интересуетесь "пермским типом" Генерала.

38
ответ дан jleft 28 November 2019 в 21:13
поделиться
3
ответ дан Joachim Sauer 28 November 2019 в 21:13
поделиться
Другие вопросы по тегам:

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