连接到我的应用程序中的GemFire服务器需要很长时间

问题描述 投票:0回答:2

我正在工作场所的项目中设置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. 为我的客户端使用缓存代理

[当我在家中尝试一个简单的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

我的简单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 {
gemfire spring-data-gemfire
2个回答
0
投票

[在某些情况下,可能仅仅是您遇到DNS查找问题-尤其是因为您的房屋与其他位置的性能似乎有所不同。

您可以尝试以下方法:

使用hostname命令获取您的主机名。将此作为别名添加到/etc/hosts127.0.0.1文件中。例如,如果您的主机名看起来像foobar.local,则应将/etc/hosts调整为包括以下内容:

127.0.0.1   localhost  foobar foobar.local

注意,我同时添加了FQDN(包括.local返回的hostname)以及较短的版本。


0
投票

嗯,这是一个已加载的问题。

[在客户端(缓存)连接到群集(或服务器)之前和之后,都有很多事情发生。由于您的描述在这种情况下不够描述,因此会想到许多问题。

  1. 您提到您正在连接到服务器,这意味着您的Spring Boot,Pivotal GemFire(SDG)应用程序的Spring数据是客户端,尤其是ClientCache?如果是这样,您要通过哪种网络(本地主机,专用内部网络,VPN,云网络等)?

  2. 是否涉及防火墙,代理,NAT(例如路由器,交换机)或其他网络设备?如果您注意到延迟,则很可能出现网络问题。

  3. 您如何配置客户端和服务器之间的池?例如,您要连接到1个或多个定位器,还是单个定位器。您是直接连接到服务器吗?

  4. 您的集群多大?是否有超过1台服务器?您是否启用了单跳?

  5. 您正在执行哪种数据访问操作?结果集有多大(即有多少个对象)?这些物体有多大?

  6. 您正在使用哪种形式的序列化(例如,您是否在应用程序域模型类型中实现java.io.Serializable?是否正在使用PDX?是否正在使用GemFire Delta和DataSerialization?

    ]
  7. 您是否尝试过在不同的上下文中运行相同的应用程序?

  8. 您是否可以在某个地方(例如在GitHub中)公开访问您的应用程序?

  9. 您是否可以共享配置,客户端和服务器的完整日志文件,客户端和服务器的线程转储,等等?] >>

  10. 您正在从应用程序访问数据的区域是PARTITION区域吗?是否启用了持久性?如果是多节点(服务器)集群,是否所有成员都托管PR?

  11. 等,等等,等等...

  12. 您共享的一小段日志内容...

    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.*属性。

如果您的文件系统状况良好?

ClassPathLoader类是Pivotal GemFire内部类,所以无论发生什么事情,都在Spring(Data GemFire)的控制范围之外,并且完全与GemFire本身有关。

[您还应该注意,仅因为创建了GemFireCache(例如ClientCache)实例,并不一定意味着高速缓存或GemFire系统已经完全初始化。在创建了某些GemFire对象(例如缓存,然后是Regions,然后是索引和磁盘存储等)之后,后台发生了许多异步任务(例如,创建池最小大小)。

[此外,创建的缓存(例如ClientCache)实例只是一个容器,用于容纳所有其他GemFire对象,例如Regions,它们实际上保存数据。必须先创建和初始化区域,然后才能进行任何数据访问操作。但是,要创建区域,您需要一个缓存(即首先是ClientCache实例)。

您的客户区域是什么类型(例如ClientRegionShortcut.PROXYClientRegionShortcut.CACHING_PROXY)?

您的详细信息中有太多空白,无法为您提供更准确的答案。

© www.soinside.com 2019 - 2024. All rights reserved.