Странное поведение Appfabric

У меня есть служба Windows, на которой размещена служба WCF, работающая на машине A. Она извлекает объекты с машины B, на которой работает Appfabric, где хранятся фактические объекты. Машина B имеет 2 региона: «Статьи» и «Тестовые статьи». Живое приложение использует статьи, а моя тестовая программа использует TestArticles.

Он работает уже шесть месяцев без проблем, но теперь вдруг живое приложение начинает возвращать null для некоторых объектов, пока служба не будет перезапущена, и все объекты снова будут кэшироваться. Затем он работает в течение нескольких часов, и снова возвращаются нулевые значения. Выселение и TTL не используются, поэтому объекты должны оставаться там навсегда. Единственное, о чем я могу думать, это то, что память сервера Appfabric почти заполнена. Свободно только 43 МБ из 12 ГБ!

Итак, что я хотел бы знать, так это то, что происходит, когда память сервера Appfabric заполнена, и я пытаюсь кэшировать больше объектов в области TestArticles. Им это удается, но выбрасывает ли Appfabric объекты из статей?


person Serve Laurijssen    schedule 07.07.2015    source источник


Ответы (1)


На странице устранения неполадок с выселением указано следующее: сказать:

Кластер кэша Windows Server AppFabric использует вытеснение для управления объемом памяти, используемой службой кэширования на узле кэша. Выселение происходит по двум сценариям:

Доступной физической памяти на сервере критически мало.

Использование памяти службой кэширования превышает верхний предел для узла кэширования.

На странице Срок действия и удаление также говорится :

Чтобы сохранить объем памяти, доступный для кэша на каждом хосте кэша, AppFabric поддерживает вытеснение наименее недавно использовавшихся (LRU).

Таким образом, когда на вашем сервере заканчивается память, вы должны увидеть вытеснение LRU.

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

person stuartd    schedule 08.07.2015
comment
Спасибо за ваш ответ ... Сейчас я установил на него несколько счетчиков производительности, чтобы увидеть, как часто объекты вытесняются. Знаете ли вы, как я могу обновить существующие объекты в кеше без создания новой версии appfabric? Это, конечно, для того, чтобы использование памяти было как можно меньше. - person Serve Laurijssen; 09.07.2015
comment
Говорят, что метод Put «добавить или заменить объект в кеше», но я ожидаю, что замена в этом контексте будет означать «удалить старую версию и добавить новую версию», а не обновление на месте. - person stuartd; 09.07.2015
comment
Да, это говорит об этом, но, тем не менее, использование памяти продолжает увеличиваться каждый раз, когда я вызываю наложение на существующий объект. - person Serve Laurijssen; 16.07.2015
comment
Так будет до тех пор, пока старые экземпляры не будут удалены сборщиком мусора. Существует Invoke-GC команда, которая инициирует сборку мусора, но, поскольку это живой сайт, вы должны быть осторожны с этим. - person stuartd; 16.07.2015