2015-07-07 4 views
0

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

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

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

ответ

1

Eviction Troubleshooting page это сказать:

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

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

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

Expiration and Eviction страница также говорит:

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

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

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

+0

Спасибо за ваш ответ ... Теперь я добавил некоторые показатели производительности, чтобы узнать, как часто выселяются объекты. Знаете ли вы, как я могу обновлять существующие объекты в кеше без приложения, создавая новую версию? Это позволяет использовать память как можно ниже. – Laurijssen

+0

[Путь метода] (https://msdn.microsoft.com/en-us/library/ff424971%28v=azure.10%29.aspx) называется «добавлять или заменять объект в кеше», но я ожидал бы замены в этом контексте, чтобы означать «удалить старую версию и добавить новую версию», а не обновление на месте. – stuartd

+0

Да, это говорит о том, что, тем не менее, использование памяти продолжает увеличиваться каждый раз, когда я вызываю ставку на существующий объект. – Laurijssen