В моем приложении требуется много времени для подключения к серверу GemFire - PullRequest
0 голосов
/ 13 марта 2020

Я настраиваю spring-data-gemfire в своем проекте на своем рабочем месте. Однако подключение к серверу GemFire ​​и получение данных из моего приложения занимает много времени.

2020-Mar-13 09:00:10 | TRACE | annotation.ScheduledAnnotationPostProcessor | No @Scheduled annotations found on bean class: class org.springframework.gemfire.client.CLientCacheFactoryBean
2020-Mar-13 09:00:10 | TRACE | support.DefaultListableBeanFactory |Finished creating instance of bean 'gemfireCache'
2020-Mar-13 09:00:42 | TRACE | internal.ClassPathLoader | getResource(gemfire.properties)
2020-Mar-13 09:00:42 | TRACE | internal.ClassPathLoader | getResource trying: sun.misc.Launcher$AppClassLoader@73d16e93
2020-Mar-13 09:00:42 | TRACE | internal.ClassPathLoader | getResource trying: java.net.Launcher$AppClassLoader@73d16e93
.....

Могу ли я узнать, почему от «Закончено создание экземпляра bean ..» до «getResource ..» требуется более 40 секунд?

Текущие версии

  1. Spring Data GemFire ​​2.2.1.RELEASE
  2. Spring Boot 2.2.1.RELEASE
  3. 3 Сервер и 2 локатора (установлены на виртуальной машине)
  4. Частная локальная сеть
  5. Использование Java Сериализация
  6. Использование Caching Proxy для моего клиента

Когда я пробовал простое приложение gemfire у себя дома, это заняло около 5 секунд.

[TRACE] 2020-03-14 16:54:58.623 [main] CachedIntrospectionResults - Found bean property 'propertiesPersister' of type [org.springframework.util.PropertiesPersister]
[TRACE] 2020-03-14 16:54:58.623 [main] CachedIntrospectionResults - Found bean property 'singleton' of type [boolean]
[TRACE] 2020-03-14 16:54:58.626 [main] TypeConverterDelegate - Converting String to [class [Lorg.springframework.core.io.Resource;] using property editor [org.springframework.core.io.support.ResourceArrayPropertyEditor@669253b7
[TRACE] 2020-03-14 16:54:58.627 [main] PathMatchingResourcePatternResolver - Resolved classpath location [META-INF/gemfire-named-queries.properties] to resources []
[TRACE] 2020-03-14 16:54:58.627 [main] DefaultListableBeanFactory - Invoking afterPropertiesSet() on bean with name '(inner bean)#6cc0bcf6'
[TRACE] 2020-03-14 16:54:58.628 [main] DefaultListableBeanFactory - Finished creating instance of bean '(inner bean)#6cc0bcf6'
[TRACE] 2020-03-14 16:54:58.630 [main] DefaultListableBeanFactory - Finished creating instance of bean '(inner bean)#1a6f5124'
[TRACE] 2020-03-14 16:54:58.631 [main] DefaultListableBeanFactory - Creating instance of bean '(inner bean)#49a64d82'
[TRACE] 2020-03-14 16:54:58.635 [main] DefaultListableBeanFactory - Invoking afterPropertiesSet() on bean with name '(inner bean)#49a64d82'
[TRACE] 2020-03-14 16:54:58.635 [main] DefaultListableBeanFactory - Finished creating instance of bean '(inner bean)#49a64d82'
[TRACE] 2020-03-14 16:54:58.636 [main] DefaultListableBeanFactory - Returning cached instance of singleton bean 'gemfireCache'
[TRACE] 2020-03-14 16:55:03.415 [main] ClassPathLoader - getResource(gemfire.properties)
[TRACE] 2020-03-14 16:55:03.418 [main] ClassPathLoader - getResource trying: sun.misc.Launcher$AppClassLoader@73d16e93
[TRACE] 2020-03-14 16:55:03.418 [main] ClassPathLoader - getResource trying: java.net.URLClassLoader@1500e009
[TRACE] 2020-03-14 16:55:03.418 [main] ClassPathLoader - getResource(gfsecurity.properties)
[TRACE] 2020-03-14 16:55:03.419 [main] ClassPathLoader - getResource trying: sun.misc.Launcher$AppClassLoader@73d16e93
[TRACE] 2020-03-14 16:55:03.419 [main] ClassPathLoader - getResource trying: java.net.URLClassLoader@1500e009
[TRACE] 2020-03-14 16:55:03.429 [main] ClassPathLoader - forName(org.apache.logging.log4j.core.impl.Log4jContextFactory)
[TRACE] 2020-03-14 16:55:03.429 [main] ClassPathLoader - forName trying: sun.misc.Launcher$AppClassLoader@73d16e93
[TRACE] 2020-03-14 16:55:03.429 [main] ClassPathLoader - forName found by: sun.misc.Launcher$AppClassLoader@73d16e93 2020-03-14 16:55:03,432 main INFO Log4j Core is available and using Log4jProvider
[TRACE] 2020-03-14 16:55:03.434 [main] ClassPathLoader - forName(org.apache.geode.internal.logging.log4j.Log4jAgent)
[TRACE] 2020-03-14 16:55:03.434 [main] ClassPathLoader - forName trying: sun.misc.Launcher$AppClassLoader@73d16e93
[TRACE] 2020-03-14 16:55:03.435 [main] ClassPathLoader - forName found by: sun.misc.Launcher$AppClassLoader@73d16e93 020-03-14 16:55:03,436 main INFO Using org.apache.geode.internal.logging.log4j.Log4jAgent by default for service org.apache.geode.internal.logging.ProviderAgent
[TRACE] 2020-03-14 16:55:03.848 [main] ThreadContext - get() - in thread [main]
[DEBUG] 2020-03-14 16:55:03.854 [main] geode - LogWriter is created.
[DEBUG] 2020-03-14 16:55:03.854 [main] security - SecurityLogWriter is created.
[TRACE] 2020-03-14 16:55:03.858 [main] ClassPathLoader - getResource(org/apache/geode/internal/GemFireVersion.properties)
[TRACE] 2020-03-14 16:55:03.858 [main] ClassPathLoader - getResource trying: sun.misc.Launcher$AppClassLoader@73d16e93
[TRACE] 2020-03-14 16:55:03.858 [main] ClassPathLoader - getResource found by: sun.misc.Launcher$AppClassLoader@73d16e93

Приложение My Simple gemfire

@SpringBootApplication
@ClientCacheApplication(locators = {@ClientCacheApplication.Locator(host = "192.167.0.5", port = 10311) }, socketBufferSize = 90000, subscriptionEnabled = true)
@EnableEntityDefinedRegions(basePackageClasses = Person.class, clientRegionShortcut = ClientRegionShortcut.CACHING_PROXY)
@EnableGemfireRepositories(basePackageClasses = PersonRepository.class)
public class Application {

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

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

Вы можете попробовать это:

Получить имя хоста с помощью команды hostname. Добавьте это как псевдоним в ваш файл /etc/hosts для 127.0.0.1. Например, если ваше имя хоста выглядит примерно так: foobar.local, тогда ваш /etc/hosts должен быть скорректирован таким образом:

127.0.0.1   localhost  foobar foobar.local

Обратите внимание, что я добавил оба FQDN (включая .local, возвращаемый hostname ), а также более короткая версия.

0 голосов
/ 13 марта 2020

Ну, это загруженный вопрос.

Есть много вещей, которые происходят как до, так и после того, как клиент (кеш) подключается к кластеру (или серверу). Многие вопросы приходят на ум, так как ваше описание в данном случае не является описательным.

  1. Вы упоминаете, что подключаетесь к серверу, что подразумевает использование Spring Boot, Spring Data для Pivotal GemFire ​​( SDG) приложение является клиентом, а конкретно ClientCache? Если да, то какую сеть вы используете (localhost, частная внутренняя сеть, VPN, облачная сеть и т. Д. c)?

  2. Есть ли межсетевой экран, прокси, NAT ( например, маршрутизатор, коммутатор или другое сетевое устройство? Если вы заметили задержку, то есть большая вероятность проблем с сетью.

  3. Как вы настроили пул между клиентом и сервером? Например, вы подключаетесь к одному или нескольким локаторам или к одному локатору. Вы подключаетесь напрямую к серверу?

  4. Насколько велик ваш кластер? Существует ли более 1 сервера? У вас включен один прыжок?

  5. Какую операцию доступа к данным вы выполняете? Насколько велик набор результатов (т. Е. Сколько объектов)? Насколько велики объекты?

  6. Какую форму сериализации вы используете (например, вы используете типы моделей предметной области java.io.Serializable? Вы случайно используете PDX? Вы используете GemFire Дельты и DataSerialization?

  7. Вы пытались запустить одно и то же приложение в разных контекстах?

  8. Есть ли ваше приложение общедоступным где-нибудь, например, в GitHub?

  9. Можете ли вы поделиться своей конфигурацией, полными файлами журнала для клиента и сервера, дампами потоков для клиента и сервера и т. д. c?

  10. Является ли регион, в котором вы осуществляете доступ к данным из вашего приложения, регионом PARTITION? Включено ли сохранение? Если кластер состоит из нескольких узлов (сервер), все ли участники размещают PR?

  11. et c, et c, et c ...

Небольшой фрагмент содержимого журнала, которым вы поделились ...

2020-Mar-13 09:00:42 | TRACE | internal.ClassPathLoader | getResource(gemfire.properties)
2020-Mar-13 09:00:42 | TRACE | internal.ClassPathLoader | getResource trying: sun.misc.Launcher$AppClassLoader@73d16e93
2020-Mar-13 09:00:42 | TRACE | internal.ClassPathLoader | getResource trying: java.net.Launcher$AppClassLoader@73d16e93

Похоже, он пытается разрешить файл gemfire.properties е. Вы настроили gemfire.properties? Если это так, то лучше определить ресурс Spring Boot application.properties и использовать вместо него соответствующие эквивалентные свойства spring.data.gemfire.*.

Если ваша файловая система в добром здравии?

The ClassPathLoader class является внутренним классом Pivotal GemFire, поэтому, что бы ни происходило, он находится вне контроля Spring (Data GemFire) и полностью связан с самим GemFire.

Вы также должны знать, что только потому, что GemFireCache (например, ClientCache) экземпляр был создан, это не обязательно означает, что кэш или система GemFire ​​в целом полностью инициализированы. Существует много асинхронных задач (например, создание минимального размера пула), которые выполняются в фоновом режиме после создания определенных объектов GemFire ​​(например, кэш, затем регионы, затем индексы и дисковые хранилища и т. Д. c).

Также созданный экземпляр кэша (например, ClientCache) - это просто контейнер для хранения всех других объектов GemFire, таких как Regions, которые фактически содержат данные. Области должны быть созданы и инициализированы, прежде чем могут произойти какие-либо операции доступа к данным. Однако для создания регионов вам необходим кеш (т. Е. Экземпляр ClientCache в первую очередь).

Какого типа ваши клиентские регионы (например, ClientRegionShortcut.PROXY или ClientRegionShortcut.CACHING_PROXY)?

В ваших данных слишком много пробелов, чтобы дать вам более точный ответ.

...