JoyLau's Blog

JoyLau 的技术学习与思考

示例代码,10后抛出超时错误,并且取消子线程任务的执行

1
2
3
4
5
6
7
8
9
10
11
12
13
ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<String> future = executorService.submit(() -> {
....
}
);

try {
return future.get(10, TimeUnit.SECONDS);
} catch (Exception e) {
future.cancel(true);
executorService.shutdown();
return new ArrayList<>();
}

背景

最近做了一个小 demo,需要使用到 spring security,于是就把以前写过的 spring security 的代码直接 copy 过来用了,没想到却出现了问题…..

问题

小 demo 直接使用 spring boot 构建,前后端不分离,于是自己写的登录界面,在 spring security 里配置好 loginPage 后,发现只要打开登录页就会无限重定向到登录页,其他任何请求都是如此

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.anonymous().disable()
.csrf().disable()
.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated()//其他请求必须授权后访问
.and()
.formLogin()
.loginPage("/")
.loginProcessingUrl("/login")
.permitAll();//登录请求可以直接访问
}

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().passwordEncoder(passwordEncoder()).withUser("admin").password(passwordEncoder().encode("123456")).roles("ADMIN");
}

@Bean
public SessionRegistry sessionRegistry(){
return new SessionRegistryImpl();
}

@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}


@Bean
public AuthenticationSuccess authenticationSuccessHandler(){
return new AuthenticationSuccess();
}

@Bean
public AuthenticationFailureHandler authenticationFailureHandler(){
return new AuthenticationFailure();
}
}

分析

一开始的直觉告诉我,登录页的请求 “/“ 没有认证,而没有认证的请求会重定向到登录页,也就还是 “/“,于是就造成了重定向

于是我先添加请求 “/“, 不进行认证即可访问,也就是上面配置的 .antMatchers("/").permitAll()

重启后发现不起作用,依旧无限重定向

然而可怕的是控制台没有打印任何日志….

一下子懵逼了,不知如何解决….

冷静下来分析后—

我是这样解决的

打开 debug 日志

配置 spring security 的日志级别

1
2
3
logging:
level:
org.springframework.security: debug

启动时看到日志截取如下

1
2
3
4
5
6
7
8
9
2019-08-19 15:19:06.628 DEBUG 19133 --- [           main] edFilterInvocationSecurityMetadataSource : Adding web access control expression 'permitAll', for ExactUrl [processUrl='/?error']
2019-08-19 15:19:06.631 DEBUG 19133 --- [ main] edFilterInvocationSecurityMetadataSource : Adding web access control expression 'permitAll', for ExactUrl [processUrl='/login']
2019-08-19 15:19:06.631 DEBUG 19133 --- [ main] edFilterInvocationSecurityMetadataSource : Adding web access control expression 'permitAll', for ExactUrl [processUrl='/']
2019-08-19 15:19:06.631 DEBUG 19133 --- [ main] edFilterInvocationSecurityMetadataSource : Adding web access control expression 'permitAll', for Ant [pattern='/']
2019-08-19 15:19:06.632 DEBUG 19133 --- [ main] edFilterInvocationSecurityMetadataSource : Adding web access control expression 'authenticated', for any request
2019-08-19 15:19:06.646 DEBUG 19133 --- [ main] o.s.s.w.a.i.FilterSecurityInterceptor : Validated configuration attributes
2019-08-19 15:19:06.648 DEBUG 19133 --- [ main] o.s.s.w.a.i.FilterSecurityInterceptor : Validated configuration attributes

2019-08-19 15:34:24.451 INFO 22575 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@32c6d164, org.springframework.security.web.context.SecurityContextPersistenceFilter@390a7532, org.springframework.security.web.header.HeaderWriterFilter@5ebf776c, org.springframework.security.web.authentication.logout.LogoutFilter@523ade68, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@652f26da, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7d49a1a0, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3a12f3e7, org.springframework.security.web.session.SessionManagementFilter@54ae1240, org.springframework.security.web.access.ExceptionTranslationFilter@3c62f69a, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@2b3242a5]

可以看到 “/“ 添加成功了,可是为什么好像没有生效呢?

错误信息

继续往下走,刷新登录页,发现控制台打印了错误信息如下“

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
2019-08-19 15:21:16.813 DEBUG 19133 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy        : / at position 1 of 10 in additional filter chain; firing Filter: 'WebAsyncManagerIntegrationFilter'
2019-08-19 15:21:16.815 DEBUG 19133 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy : / at position 2 of 10 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter'
2019-08-19 15:21:16.816 DEBUG 19133 --- [nio-8080-exec-2] w.c.HttpSessionSecurityContextRepository : No HttpSession currently exists
2019-08-19 15:21:16.817 DEBUG 19133 --- [nio-8080-exec-2] w.c.HttpSessionSecurityContextRepository : No SecurityContext was available from the HttpSession: null. A new one will be created.
2019-08-19 15:21:16.822 DEBUG 19133 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy : / at position 3 of 10 in additional filter chain; firing Filter: 'HeaderWriterFilter'
2019-08-19 15:21:16.825 DEBUG 19133 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy : / at position 4 of 10 in additional filter chain; firing Filter: 'LogoutFilter'
2019-08-19 15:21:16.825 DEBUG 19133 --- [nio-8080-exec-2] o.s.s.web.util.matcher.OrRequestMatcher : Trying to match using Ant [pattern='/logout', GET]
2019-08-19 15:21:16.825 DEBUG 19133 --- [nio-8080-exec-2] o.s.s.w.u.matcher.AntPathRequestMatcher : Checking match of request : '/'; against '/logout'
2019-08-19 15:21:16.826 DEBUG 19133 --- [nio-8080-exec-2] o.s.s.web.util.matcher.OrRequestMatcher : Trying to match using Ant [pattern='/logout', POST]
2019-08-19 15:21:16.826 DEBUG 19133 --- [nio-8080-exec-2] o.s.s.w.u.matcher.AntPathRequestMatcher : Request 'GET /' doesn't match 'POST /logout'
2019-08-19 15:21:16.826 DEBUG 19133 --- [nio-8080-exec-2] o.s.s.web.util.matcher.OrRequestMatcher : Trying to match using Ant [pattern='/logout', PUT]
2019-08-19 15:21:16.826 DEBUG 19133 --- [nio-8080-exec-2] o.s.s.w.u.matcher.AntPathRequestMatcher : Request 'GET /' doesn't match 'PUT /logout'
2019-08-19 15:21:16.826 DEBUG 19133 --- [nio-8080-exec-2] o.s.s.web.util.matcher.OrRequestMatcher : Trying to match using Ant [pattern='/logout', DELETE]
2019-08-19 15:21:16.827 DEBUG 19133 --- [nio-8080-exec-2] o.s.s.w.u.matcher.AntPathRequestMatcher : Request 'GET /' doesn't match 'DELETE /logout'
2019-08-19 15:21:16.827 DEBUG 19133 --- [nio-8080-exec-2] o.s.s.web.util.matcher.OrRequestMatcher : No matches found
2019-08-19 15:21:16.827 DEBUG 19133 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy : / at position 5 of 10 in additional filter chain; firing Filter: 'UsernamePasswordAuthenticationFilter'
2019-08-19 15:21:16.827 DEBUG 19133 --- [nio-8080-exec-2] o.s.s.w.u.matcher.AntPathRequestMatcher : Request 'GET /' doesn't match 'POST /login'
2019-08-19 15:21:16.828 DEBUG 19133 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy : / at position 6 of 10 in additional filter chain; firing Filter: 'RequestCacheAwareFilter'
2019-08-19 15:21:16.828 DEBUG 19133 --- [nio-8080-exec-2] o.s.s.w.s.HttpSessionRequestCache : saved request doesn't match
2019-08-19 15:21:16.829 DEBUG 19133 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy : / at position 7 of 10 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter'
2019-08-19 15:21:16.832 DEBUG 19133 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy : / at position 8 of 10 in additional filter chain; firing Filter: 'SessionManagementFilter'
2019-08-19 15:21:16.833 DEBUG 19133 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy : / at position 9 of 10 in additional filter chain; firing Filter: 'ExceptionTranslationFilter'
2019-08-19 15:21:21.085 DEBUG 19133 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy : / at position 10 of 10 in additional filter chain; firing Filter: 'FilterSecurityInterceptor'
2019-08-19 15:21:21.440 DEBUG 19133 --- [nio-8080-exec-2] o.s.s.w.a.i.FilterSecurityInterceptor : Secure object: FilterInvocation: URL: /; Attributes: [permitAll]
2019-08-19 15:21:21.450 DEBUG 19133 --- [nio-8080-exec-2] o.s.s.w.a.ExceptionTranslationFilter : Authentication exception occurred; redirecting to authentication entry point

org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
at org.springframework.security.access.intercept.AbstractSecurityInterceptor.credentialsNotFound(AbstractSecurityInterceptor.java:379) ~[spring-security-core-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:223) ~[spring-security-core-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:124) ~[spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) ~[spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119) ~[spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:74) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178) [spring-security-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:118) [spring-web-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587) [tomcat-embed-core-9.0.22.jar:9.0.22]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.22.jar:9.0.22]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) [na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.22.jar:9.0.22]
at java.base/java.lang.Thread.run(Thread.java:844) [na:na]

看到2个关键的错误信息:

  1. Authentication exception occurred; redirecting to authentication entry point
  2. An Authentication object was not found in the SecurityContext

意思是认证异常,重定向到认证入口点,异常的原因是在 SecurityContext 没有找到认证信息对象

排查

根据错误信息,我先到 ExceptionTranslationFilter 类中去查看问题出在什么地方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;

try {
chain.doFilter(request, response);

logger.debug("Chain processed normally");
}
catch (IOException ex) {
throw ex;
}
catch (Exception ex) {
// Try to extract a SpringSecurityException from the stacktrace
Throwable[] causeChain = throwableAnalyzer.determineCauseChain(ex);
RuntimeException ase = (AuthenticationException) throwableAnalyzer
.getFirstThrowableOfType(AuthenticationException.class, causeChain);

if (ase == null) {
ase = (AccessDeniedException) throwableAnalyzer.getFirstThrowableOfType(
AccessDeniedException.class, causeChain);
}

if (ase != null) {
if (response.isCommitted()) {
throw new ServletException("Unable to handle the Spring Security Exception because the response is already committed.", ex);
}
handleSpringSecurityException(request, response, chain, ase);
}
else {
// Rethrow ServletExceptions and RuntimeExceptions as-is
if (ex instanceof ServletException) {
throw (ServletException) ex;
}
else if (ex instanceof RuntimeException) {
throw (RuntimeException) ex;
}

// Wrap other Exceptions. This shouldn't actually happen
// as we've already covered all the possibilities for doFilter
throw new RuntimeException(ex);
}
}
}

ExceptionTranslationFilter 没有什么逻辑,都是对异常的处理, 然后直接进入下一个过滤器了,

那么这时我们就需要了解 spring security 的过滤器链的顺序

我们来看最开始打印的 debug 的日志信息,我整理一下,有如下顺序:

WebAsyncManagerIntegrationFilter
SecurityContextPersistenceFilter
HeaderWriterFilter
LogoutFilter
UsernamePasswordAuthenticationFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
SessionManagementFilter
ExceptionTranslationFilter
FilterSecurityInterceptor

这是spring security 的默认过滤器链,完整的过滤器链可以通过查看源码详细看到, 在类 FilterComparator 中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
FilterComparator() {
Step order = new Step(INITIAL_ORDER, ORDER_STEP);
put(ChannelProcessingFilter.class, order.next());
put(ConcurrentSessionFilter.class, order.next());
put(WebAsyncManagerIntegrationFilter.class, order.next());
put(SecurityContextPersistenceFilter.class, order.next());
put(HeaderWriterFilter.class, order.next());
put(CorsFilter.class, order.next());
put(CsrfFilter.class, order.next());
put(LogoutFilter.class, order.next());
filterToOrder.put(
"org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter",
order.next());
put(X509AuthenticationFilter.class, order.next());
put(AbstractPreAuthenticatedProcessingFilter.class, order.next());
filterToOrder.put("org.springframework.security.cas.web.CasAuthenticationFilter",
order.next());
filterToOrder.put(
"org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter",
order.next());
put(UsernamePasswordAuthenticationFilter.class, order.next());
put(ConcurrentSessionFilter.class, order.next());
filterToOrder.put(
"org.springframework.security.openid.OpenIDAuthenticationFilter", order.next());
put(DefaultLoginPageGeneratingFilter.class, order.next());
put(DefaultLogoutPageGeneratingFilter.class, order.next());
put(ConcurrentSessionFilter.class, order.next());
put(DigestAuthenticationFilter.class, order.next());
filterToOrder.put(
"org.springframework.security.oauth2.server.resource.web.BearerTokenAuthenticationFilter", order.next());
put(BasicAuthenticationFilter.class, order.next());
put(RequestCacheAwareFilter.class, order.next());
put(SecurityContextHolderAwareRequestFilter.class, order.next());
put(JaasApiIntegrationFilter.class, order.next());
put(RememberMeAuthenticationFilter.class, order.next());
put(AnonymousAuthenticationFilter.class, order.next());
filterToOrder.put(
"org.springframework.security.oauth2.client.web.OAuth2AuthorizationCodeGrantFilter",
order.next());
put(SessionManagementFilter.class, order.next());
put(ExceptionTranslationFilter.class, order.next());
put(FilterSecurityInterceptor.class, order.next());
put(SwitchUserFilter.class, order.next());
}

回到原来的问题, ExceptionTranslationFilter 过滤器后是 FilterSecurityInterceptor 过滤器

再来看 FilterSecurityInterceptor 的源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
FilterInvocation fi = new FilterInvocation(request, response, chain);
invoke(fi);
}

public void invoke(FilterInvocation fi) throws IOException, ServletException {
if ((fi.getRequest() != null)
&& (fi.getRequest().getAttribute(FILTER_APPLIED) != null)
&& observeOncePerRequest) {
// filter already applied to this request and user wants us to observe
// once-per-request handling, so don't re-do security checking
fi.getChain().doFilter(fi.getRequest(), fi.getResponse());
}
else {
// first time this request being called, so perform security checking
if (fi.getRequest() != null && observeOncePerRequest) {
fi.getRequest().setAttribute(FILTER_APPLIED, Boolean.TRUE);
}

InterceptorStatusToken token = super.beforeInvocation(fi);

try {
fi.getChain().doFilter(fi.getRequest(), fi.getResponse());
}
finally {
super.finallyInvocation(token);
}

super.afterInvocation(token, null);
}
}

这里的看的主要方法是 invoke(fi)

通过调试看到, 问题出在 beforeInvocation(fi) 方法里:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
protected InterceptorStatusToken beforeInvocation(Object object) {
Assert.notNull(object, "Object was null");
final boolean debug = logger.isDebugEnabled();

if (!getSecureObjectClass().isAssignableFrom(object.getClass())) {
throw new IllegalArgumentException(
"Security invocation attempted for object "
+ object.getClass().getName()
+ " but AbstractSecurityInterceptor only configured to support secure objects of type: "
+ getSecureObjectClass());
}

Collection<ConfigAttribute> attributes = this.obtainSecurityMetadataSource()
.getAttributes(object);

if (attributes == null || attributes.isEmpty()) {
if (rejectPublicInvocations) {
throw new IllegalArgumentException(
"Secure object invocation "
+ object
+ " was denied as public invocations are not allowed via this interceptor. "
+ "This indicates a configuration error because the "
+ "rejectPublicInvocations property is set to 'true'");
}

if (debug) {
logger.debug("Public object - authentication not attempted");
}

publishEvent(new PublicInvocationEvent(object));

return null; // no further work post-invocation
}

if (debug) {
logger.debug("Secure object: " + object + "; Attributes: " + attributes);
}

if (SecurityContextHolder.getContext().getAuthentication() == null) {
credentialsNotFound(messages.getMessage(
"AbstractSecurityInterceptor.authenticationNotFound",
"An Authentication object was not found in the SecurityContext"),
object, attributes);
}

Authentication authenticated = authenticateIfRequired();

// Attempt authorization
try {
this.accessDecisionManager.decide(authenticated, object, attributes);
}
catch (AccessDeniedException accessDeniedException) {
publishEvent(new AuthorizationFailureEvent(object, attributes, authenticated,
accessDeniedException));

throw accessDeniedException;
}

if (debug) {
logger.debug("Authorization successful");
}

if (publishAuthorizationSuccess) {
publishEvent(new AuthorizedEvent(object, attributes, authenticated));
}

// Attempt to run as a different user
Authentication runAs = this.runAsManager.buildRunAs(authenticated, object,
attributes);

if (runAs == null) {
if (debug) {
logger.debug("RunAsManager did not change Authentication object");
}

// no further work post-invocation
return new InterceptorStatusToken(SecurityContextHolder.getContext(), false,
attributes, object);
}
else {
if (debug) {
logger.debug("Switching to RunAs Authentication: " + runAs);
}

SecurityContext origCtx = SecurityContextHolder.getContext();
SecurityContextHolder.setContext(SecurityContextHolder.createEmptyContext());
SecurityContextHolder.getContext().setAuthentication(runAs);

// need to revert to token.Authenticated post-invocation
return new InterceptorStatusToken(origCtx, true, attributes, object);
}
}

继续调试,问题定位在了 if (SecurityContextHolder.getContext().getAuthentication() == null)

也就打印出了日志 An Authentication object was not found in the SecurityContext,这也就对的上号了

继续分析

为什么 SecurityContext 里的 Authentication 会为空呢?

据官方文档解释 spring security 默认是会有匿名的 Authentication 的啊

一想到这里,马上看下配置,原来是我禁用了匿名用户, .anonymous().disable() 怪不得这样。。。。

可是一想,为什么以前项目这么配置就没有出现这个问题呢???

对比发现,以前的项目是前后端分离的,不需要配置 loginPage, 而且登录成功和登录失败都是返回状态码和错误信息的,和我的这个小 demo 不一样,这个是前后端不分离的,需要做页面的跳转

为什么如此

这时搞清楚之后,我把 .anonymous().disable() 注释掉再重启,刷新下页面,果然登录页出来了,问题不再了

那么为什么会这样呢???

我仔细分析了一下, 看下注释掉配置会有说明不同

首先从过滤器链来看, 这里我不再贴日志信息了, 过滤器链整理如下:

WebAsyncManagerIntegrationFilter
SecurityContextPersistenceFilter
HeaderWriterFilter
LogoutFilter
UsernamePasswordAuthenticationFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter
SessionManagementFilter
ExceptionTranslationFilter
FilterSecurityInterceptor

对比发现,过滤器链里多了一个过滤器 AnonymousAuthenticationFilter,来看看 AnonymousAuthenticationFilter 做了什么事情

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {

if (SecurityContextHolder.getContext().getAuthentication() == null) {
SecurityContextHolder.getContext().setAuthentication(
createAuthentication((HttpServletRequest) req));

if (logger.isDebugEnabled()) {
logger.debug("Populated SecurityContextHolder with anonymous token: '"
+ SecurityContextHolder.getContext().getAuthentication() + "'");
}
}
else {
if (logger.isDebugEnabled()) {
logger.debug("SecurityContextHolder not populated with anonymous token, as it already contained: '"
+ SecurityContextHolder.getContext().getAuthentication() + "'");
}
}

chain.doFilter(req, res);
}

protected Authentication createAuthentication(HttpServletRequest request) {
AnonymousAuthenticationToken auth = new AnonymousAuthenticationToken(key,
principal, authorities);
auth.setDetails(authenticationDetailsSource.buildDetails(request));

return auth;
}

看到了关键信息 createAuthenticationsetAuthentication, 那么在后续的过滤器链中就有了认证信息,不再报错了

这也就是为什么解决了这个问题的原因所在

重定向的原因

至于为什么会无限的重定向到登录页,还得再回过头来看 ExceptionTranslationFilter 类,这里有个处理异常的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
private void handleSpringSecurityException(HttpServletRequest request,
HttpServletResponse response, FilterChain chain, RuntimeException exception)
throws IOException, ServletException {
if (exception instanceof AuthenticationException) {
logger.debug(
"Authentication exception occurred; redirecting to authentication entry point",
exception);

sendStartAuthentication(request, response, chain,
(AuthenticationException) exception);
}
else if (exception instanceof AccessDeniedException) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authenticationTrustResolver.isAnonymous(authentication) || authenticationTrustResolver.isRememberMe(authentication)) {
logger.debug(
"Access is denied (user is " + (authenticationTrustResolver.isAnonymous(authentication) ? "anonymous" : "not fully authenticated") + "); redirecting to authentication entry point",
exception);

sendStartAuthentication(
request,
response,
chain,
new InsufficientAuthenticationException(
messages.getMessage(
"ExceptionTranslationFilter.insufficientAuthentication",
"Full authentication is required to access this resource")));
}
else {
logger.debug(
"Access is denied (user is not anonymous); delegating to AccessDeniedHandler",
exception);

accessDeniedHandler.handle(request, response,
(AccessDeniedException) exception);
}
}
}

protected void sendStartAuthentication(HttpServletRequest request,
HttpServletResponse response, FilterChain chain,
AuthenticationException reason) throws ServletException, IOException {
// SEC-112: Clear the SecurityContextHolder's Authentication, as the
// existing Authentication is no longer considered valid
SecurityContextHolder.getContext().setAuthentication(null);
requestCache.saveRequest(request, response);
logger.debug("Calling Authentication entry point.");
authenticationEntryPoint.commence(request, response, reason);
}

通过调试, 发现进入了 sendStartAuthentication 方法,继续调试,进入 authenticationEntryPoint.commence 查看

实现类为 LoginUrlAuthenticationEntryPoint

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) throws IOException, ServletException {

String redirectUrl = null;

if (useForward) {

if (forceHttps && "http".equals(request.getScheme())) {
// First redirect the current request to HTTPS.
// When that request is received, the forward to the login page will be
// used.
redirectUrl = buildHttpsRedirectUrlForRequest(request);
}

if (redirectUrl == null) {
String loginForm = determineUrlToUseForThisRequest(request, response,
authException);

if (logger.isDebugEnabled()) {
logger.debug("Server side forward to: " + loginForm);
}

RequestDispatcher dispatcher = request.getRequestDispatcher(loginForm);

dispatcher.forward(request, response);

return;
}
}
else {
// redirect to login page. Use https if forceHttps true

redirectUrl = buildRedirectUrlToLoginPage(request, response, authException);

}

redirectStrategy.sendRedirect(request, response, redirectUrl);
}

这里的 redirectUrl 通过调试发现就是 "/"

于是无限重定向的原因也清楚了。

总结

解决方式有 2 种:

  1. 上面所说的注释掉 .anonymous().disable()
  2. 配置 webSecurity.ignoring().antMatchers("/")
1
2
3
4
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/");
}

这种方法一般是配置系统静态资源用,配置的请求根本不会进入 spring security 的过滤器链,直接放行,
.antMatchers("/").permitAll() 是会进入 spring security 的过滤器链的,这是 2 者的主要区别
结合实际情况,第二种方式不是太好,建议第一种方式。

背景

我这款硕美科耳机是 2015 年入手的,到现在已经 4 年多了,日常使用中汗水已经腐蚀了耳机的皮套和头悬梁的皮套
但是耳机本身是没有任何问题的,只是用起来经常掉皮,我并不想重新再买一个
于是我决定在淘宝上买些配件
把原来腐蚀掉的皮套给换掉

材料

就下面 2 个皮套和一个头悬梁
材料

原来的模样

下面是我耳机没有更换前的模样,掉皮,平时我都是用纸巾包一层在戴到头上使用



动手

  1. 先硬撕掉耳机保护套,撕不掉用剪子剪掉

  2. 撕掉之后使用扁平的螺丝刀沿着边缘将卡口翘出来,像下面这样

  3. 之后将皮套套到卡口的圈中,注意皮套上的一圈洞和卡口上的突起相对应

  4. 将套好的一只耳机沿着之前的翘起的卡口位置在按到耳机架上,另一只耳机也是这样操作

  5. 接下来就是头悬梁的皮套的安装了,这个比较麻烦

  6. 先用小号螺丝刀打开悬梁 2 边的塑料小盒,露出 2 边的钢丝

  7. 用剪刀剪断钢丝,再翘起钢丝边缘的卡扣,把钢丝取出来,另一边也是这样操作

  8. 把新的悬梁换上,把钢丝穿过悬梁的小盒子,在穿进耳机架里面

  9. 打开送的小袋子里面的四个铜帽,用钳子夹紧到耳机架边缘伸出来的钢丝末端


  10. 另一边也是相同的方式安装好

更换完成

这是更换完成后的模样

背景

一次系统重启后,Ubuntu 系统无法正确识别连接的显示器分辨率了,我连接的 2 个显示器,其中一个分辨率正确识别,另一个却无法识别,默认成 1024 的分辨率了

注意

强制设置的分辨率起码显示器得支持

步骤

  1. xrandr 查看当前显示器的设置信息, 记住当前显示接口的名称,我这里是 VGA-1, 而且支持的分辨率列表应该是没有你想要的分辨率,不然的话在设置里就能看到了
  2. 添加一个分辨率,我这里是 1920 * 1080 : cvt 1920 1080; 得到输出: Modeline "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
  3. 将 cvt 得到的显示模式使用 xrandr 命令添加:
    sudo xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
    sudo xrandr --addmode VGA-1 "1920x1080_60.00"
  4. 这样设置重启会失效, 将脚本写到一个文件中,并授予执行权限
1
2
3
4
5
!#/bin/bash
cvt 1920 1080
## 如果登录用户不是 root ,则需要使用 sudo ,sudo 需要输入密码,可使用下面的方式解决
echo "password" | sudo -S xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
echo "password" | sudo -S xrandr --addmode VGA-1 "1920x1080_60.00"
  1. 在 Ubuntu 中搜索 启动应用程序, 将脚本添加进去,完成.

背景

功能

基于百度地图的路况分析服务目前实现的功能有:

  1. 根据给定的行政区划(省,市,区,县等)获取任一缩放等级下的瓦片
  2. 提取分析拥堵数据(拥堵等级,拥堵点集,拥堵空间数据,拥堵距离,道路代码,省,市,区县,镇,街区,道路名,道路车道数,拥堵方向,拥堵描述,拥堵趋势变化,拥堵时长)
  3. 分析性能监控,日志记录

特性:

  1. 简单: 提供 web 界面,可支持在线查看,分析,调试路况信息
  2. 实时: 提供根据给定的区域范围 (矩形区域) 实时分析该区域拥堵数据的 API
  3. 弹性: 分布式计算分析,弹性增加或减少机器
  4. 易部署: 所有复杂的环境和依赖都已打包成镜像, 一条命令即可部署启动
  5. 少依赖: 服务的地理位置解析不依赖互联网接口及其他第三方接口,全部由分析服务自己解决

输入输出

输入: 百度地图瓦片
输出: 拥堵数据

环境

数据

合肥市(行政区划范围)第 17 等级下的全部地图瓦片, 共 61172 张瓦片,其中有道路信息(截止 2019-06-28) 的有 18092

环境依赖

  1. centOS : 7.5
  2. openjdk : 12
  3. openCV : 4.1.0
  4. docker : 18.09
  5. docker compose : 1.24.0
  6. redis : 5.0.5
  7. zookeeper : 3.5.5
  8. rabbitMQ : 3.7.15-management
  9. mariadb: 10.4.6
  10. postgres : 11.4
  11. node : 8.16.0
  12. PostGIS : 2.5.0
  13. PHP : 7.3.6 (PHP-pgsql, PHP-intl)
  14. Apache : 2.4

测试机器配置

暂时没有找到更合适的机器用来长时间运行测试,本次使用的是公司的机器,运行着几个服务,但对系统资源的占用都不大,可以忽略对本次性能测试的影响

CPU : Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz x64 / 单颗 / 8 核
GPU : Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller / 核显
MEM : 组合内存, 4 个插槽, 共 24G
1. 8G Kingston DDR3 1600MHz
2. 8G Kingston DDR3 1600MHz
3. 4G Samsung DDR3 1600MHz
4. 4G Hynix/Hyundai DDR3 1600MHz
DISK : INTEL SSDSC2BW240H6 240G
NETWORK : Intel Corporation Ethernet Connection I217-LM 1000M

网络 : 中国电信 50M 对等宽带, PING 60ms, 抖动 28ms, 丢包 0% (公司网络正常使用情况下)
局域网 : 100M 局域网

测试

测试说明

  1. 服务部署在单台机器上, 线程跑满
  2. 目前已稳定运行一星期 (2019年06月28日 - 2019年07月05日)
  3. 从中抽取其中 1 天的分析数据 (2019年07月04日13:12:40 - 2019年07月05日13:12:40)
  4. 本次测试的功能包含了已经开发完成的全部功能

测试数据

id task_id max_thread_size start_time end_time total_time network_time all_count error_count congest_count
102 1562217160232 8 2019-07-04 13:12:40 2019-07-04 13:14:16 95 84 18902 0 152
103 1562217280004 8 2019-07-04 13:14:40 2019-07-04 13:16:18 98 89 18902 0 153
104 1562217400004 8 2019-07-04 13:16:40 2019-07-04 13:18:14 94 85 18902 0 142
105 1562217520003 8 2019-07-04 13:18:40 2019-07-04 13:20:18 98 87 18902 0 151
106 1562217640004 8 2019-07-04 13:20:40 2019-07-04 13:22:21 101 90 18902 0 158
107 1562217760003 8 2019-07-04 13:22:40 2019-07-04 13:24:13 93 82 18902 0 166
108 1562217880004 8 2019-07-04 13:24:40 2019-07-04 13:26:16 96 85 18902 0 165
109 1562218000003 8 2019-07-04 13:26:40 2019-07-04 13:28:17 97 87 18902 0 157
110 1562218120004 8 2019-07-04 13:28:40 2019-07-04 13:30:18 98 86 18902 0 171
111 1562218240003 8 2019-07-04 13:30:40 2019-07-04 13:32:16 96 85 18902 0 164
112 1562218360003 8 2019-07-04 13:32:40 2019-07-04 13:34:29 109 97 18902 0 163
113 1562218480004 8 2019-07-04 13:34:40 2019-07-04 13:36:16 96 85 18902 0 169
114 1562218600003 8 2019-07-04 13:36:40 2019-07-04 13:38:17 97 86 18902 0 182
115 1562218720003 8 2019-07-04 13:38:40 2019-07-04 13:40:17 97 86 18902 0 182
116 1562218840004 8 2019-07-04 13:40:40 2019-07-04 13:42:18 98 86 18902 0 201
117 1562218960004 8 2019-07-04 13:42:40 2019-07-04 13:44:19 99 88 18902 0 196
118 1562219080003 8 2019-07-04 13:44:40 2019-07-04 13:46:16 96 84 18902 0 188
119 1562219200003 8 2019-07-04 13:46:40 2019-07-04 13:48:15 95 83 18902 0 174
120 1562219320003 8 2019-07-04 13:48:40 2019-07-04 13:50:16 96 83 18902 0 176
121 1562219440003 8 2019-07-04 13:50:40 2019-07-04 13:52:19 99 86 18902 0 195
122 1562219560003 8 2019-07-04 13:52:40 2019-07-04 13:54:26 106 93 18902 0 182
123 1562219680003 8 2019-07-04 13:54:40 2019-07-04 13:56:27 107 95 18902 0 185
124 1562219800003 8 2019-07-04 13:56:40 2019-07-04 13:58:19 99 89 18902 0 189
125 1562219920003 8 2019-07-04 13:58:40 2019-07-04 14:00:28 108 96 18902 0 195
126 1562220040003 8 2019-07-04 14:00:40 2019-07-04 14:02:25 105 93 18902 0 209
127 1562220160003 8 2019-07-04 14:02:40 2019-07-04 14:04:22 102 90 18902 0 205
128 1562220280003 8 2019-07-04 14:04:40 2019-07-04 14:06:18 98 87 18902 0 214
129 1562220400003 8 2019-07-04 14:06:40 2019-07-04 14:08:16 96 83 18901 1 219
130 1562220520003 8 2019-07-04 14:08:40 2019-07-04 14:10:16 96 83 18902 0 226
131 1562220640003 8 2019-07-04 14:10:40 2019-07-04 14:12:19 99 88 18902 0 240
132 1562220760002 8 2019-07-04 14:12:40 2019-07-04 14:14:18 98 85 18902 0 228
133 1562220880003 8 2019-07-04 14:14:40 2019-07-04 14:16:22 102 89 18902 0 219
134 1562221000003 8 2019-07-04 14:16:40 2019-07-04 14:18:17 97 85 18902 0 230
135 1562221120003 8 2019-07-04 14:18:40 2019-07-04 14:20:20 100 88 18902 0 247
136 1562221240003 8 2019-07-04 14:20:40 2019-07-04 14:22:17 97 86 18902 0 218
137 1562221360003 8 2019-07-04 14:22:40 2019-07-04 14:24:18 98 85 18902 0 256
138 1562221480003 8 2019-07-04 14:24:40 2019-07-04 14:26:23 103 89 18902 0 233
139 1562221600003 8 2019-07-04 14:26:40 2019-07-04 14:28:23 103 89 18902 0 246
140 1562221720003 8 2019-07-04 14:28:40 2019-07-04 14:30:22 102 87 18902 0 241
141 1562221840003 8 2019-07-04 14:30:40 2019-07-04 14:32:15 95 82 18902 0 231
142 1562221960004 8 2019-07-04 14:32:40 2019-07-04 14:34:17 97 83 18902 0 241
143 1562222080003 8 2019-07-04 14:34:40 2019-07-04 14:36:17 97 84 18902 0 241
144 1562222200002 8 2019-07-04 14:36:40 2019-07-04 14:38:52 132 120 18902 0 258
145 1562222340003 8 2019-07-04 14:39:00 2019-07-04 14:40:37 97 82 18901 1 263
146 1562222500043 8 2019-07-04 14:41:40 2019-07-04 14:43:14 94 81 18902 0 219
147 1562222620004 8 2019-07-04 14:43:40 2019-07-04 14:45:29 109 97 18902 0 208
148 1562222740004 8 2019-07-04 14:45:40 2019-07-04 14:47:18 98 84 18902 0 219
149 1562222860004 8 2019-07-04 14:47:40 2019-07-04 14:49:12 92 80 18902 0 237
150 1562222980003 8 2019-07-04 14:49:40 2019-07-04 14:51:12 92 79 18902 0 212
151 1562223100004 8 2019-07-04 14:51:40 2019-07-04 14:53:15 95 81 18902 0 248
152 1562223220003 8 2019-07-04 14:53:40 2019-07-04 14:55:22 102 89 18902 0 242
153 1562223340003 8 2019-07-04 14:55:40 2019-07-04 14:57:18 98 84 18902 0 258
154 1562223460003 8 2019-07-04 14:57:40 2019-07-04 14:59:19 99 84 18902 0 258
155 1562223580003 8 2019-07-04 14:59:40 2019-07-04 15:01:24 104 88 18900 2 270
156 1562223700003 8 2019-07-04 15:01:40 2019-07-04 15:03:18 98 85 18902 0 254
157 1562223820003 8 2019-07-04 15:03:40 2019-07-04 15:05:57 137 113 18902 0 253
158 1562223960003 8 2019-07-04 15:06:00 2019-07-04 15:07:50 110 97 18902 0 262
159 1562224080004 8 2019-07-04 15:08:00 2019-07-04 15:09:44 104 90 18902 0 250
160 1562224200003 8 2019-07-04 15:10:00 2019-07-04 15:11:44 104 92 18902 0 244
161 1562224320004 8 2019-07-04 15:12:00 2019-07-04 15:13:46 106 93 18902 0 259
162 1562224440003 8 2019-07-04 15:14:00 2019-07-04 15:15:42 102 88 18902 0 239
163 1562224560003 8 2019-07-04 15:16:00 2019-07-04 15:17:43 103 89 18902 0 269
164 1562224680003 8 2019-07-04 15:18:00 2019-07-04 15:19:35 95 83 18902 0 241
165 1562224780003 8 2019-07-04 15:19:40 2019-07-04 15:21:19 99 86 18902 0 254
166 1562224900003 8 2019-07-04 15:21:40 2019-07-04 15:23:16 96 83 18902 0 262
167 1562225020003 8 2019-07-04 15:23:40 2019-07-04 15:25:16 96 82 18902 0 268
168 1562225140003 8 2019-07-04 15:25:40 2019-07-04 15:27:35 115 99 18900 2 254
169 1562225260003 8 2019-07-04 15:27:40 2019-07-04 15:29:52 132 118 18902 0 252
170 1562225400003 8 2019-07-04 15:30:00 2019-07-04 15:31:57 117 103 18902 0 240
171 1562225520003 8 2019-07-04 15:32:00 2019-07-04 15:33:44 104 88 18902 0 260
172 1562225640003 8 2019-07-04 15:34:00 2019-07-04 15:35:42 102 88 18902 0 264
173 1562225760003 8 2019-07-04 15:36:00 2019-07-04 15:37:41 101 86 18902 0 277
174 1562225880002 8 2019-07-04 15:38:00 2019-07-04 15:39:50 110 94 18900 2 275
175 1562226000003 8 2019-07-04 15:40:00 2019-07-04 15:41:39 99 84 18902 0 281
176 1562226100003 8 2019-07-04 15:41:40 2019-07-04 15:43:17 97 82 18902 0 304
177 1562226220004 8 2019-07-04 15:43:40 2019-07-04 15:45:21 101 87 18902 0 269
178 1562226340002 8 2019-07-04 15:45:40 2019-07-04 15:47:24 104 89 18902 0 284
179 1562226460003 8 2019-07-04 15:47:40 2019-07-04 15:49:22 102 87 18902 0 290
180 1562226580003 8 2019-07-04 15:49:40 2019-07-04 15:51:23 103 89 18902 0 287
181 1562226700003 8 2019-07-04 15:51:40 2019-07-04 15:53:21 101 89 18902 0 260
182 1562226820003 8 2019-07-04 15:53:40 2019-07-04 15:55:34 114 99 18902 0 276
183 1562226940004 8 2019-07-04 15:55:40 2019-07-04 15:57:50 130 113 18901 1 280
184 1562227080003 8 2019-07-04 15:58:00 2019-07-04 15:59:54 114 99 18902 0 259
185 1562227200003 8 2019-07-04 16:00:00 2019-07-04 16:01:43 103 89 18902 0 258
186 1562227320003 8 2019-07-04 16:02:00 2019-07-04 16:03:48 108 94 18902 0 265
187 1562227440002 8 2019-07-04 16:04:00 2019-07-04 16:05:39 99 86 18902 0 257
188 1562227540003 8 2019-07-04 16:05:40 2019-07-04 16:07:21 101 87 18901 1 251
189 1562227660003 8 2019-07-04 16:07:40 2019-07-04 16:09:20 100 85 18902 0 239
190 1562227780003 8 2019-07-04 16:09:40 2019-07-04 16:11:28 108 95 18902 0 264
191 1562227900003 8 2019-07-04 16:11:40 2019-07-04 16:13:15 95 82 18902 0 284
192 1562228020002 8 2019-07-04 16:13:40 2019-07-04 16:15:46 126 114 18902 0 247
193 1562228160003 8 2019-07-04 16:16:00 2019-07-04 16:17:39 99 86 18902 0 274
194 1562228260003 8 2019-07-04 16:17:40 2019-07-04 16:19:22 102 89 18902 0 269
195 1562228380003 8 2019-07-04 16:19:40 2019-07-04 16:21:28 108 93 18901 1 252
196 1562228500004 8 2019-07-04 16:21:40 2019-07-04 16:23:33 113 97 18899 3 252
197 1562228620003 8 2019-07-04 16:23:40 2019-07-04 16:25:46 126 101 18898 4 269
198 1562228760002 8 2019-07-04 16:26:00 2019-07-04 16:27:51 111 93 18899 3 250
199 1562228880003 8 2019-07-04 16:28:00 2019-07-04 16:29:35 95 82 18902 0 247
200 1562228980002 8 2019-07-04 16:29:40 2019-07-04 16:31:22 102 87 18902 0 252
201 1562229100003 8 2019-07-04 16:31:40 2019-07-04 16:33:21 101 89 18902 0 226
202 1562229220003 8 2019-07-04 16:33:40 2019-07-04 16:35:23 103 91 18902 0 241
203 1562229340002 8 2019-07-04 16:35:40 2019-07-04 16:37:28 108 91 18899 3 266
204 1562229460003 8 2019-07-04 16:37:40 2019-07-04 16:40:41 181 159 18901 1 264
205 1562229660003 8 2019-07-04 16:41:00 2019-07-04 16:42:42 102 87 18902 0 260
206 1562229780002 8 2019-07-04 16:43:00 2019-07-04 16:44:36 96 85 18902 0 240
207 1562229880003 8 2019-07-04 16:44:40 2019-07-04 16:46:20 100 85 18901 1 242
208 1562230000003 8 2019-07-04 16:46:40 2019-07-04 16:48:22 102 89 18902 0 243
209 1562230120002 8 2019-07-04 16:48:40 2019-07-04 16:50:33 113 88 18900 2 255
210 1562230240003 8 2019-07-04 16:50:40 2019-07-04 16:52:27 106 93 18902 0 244
211 1562230360003 8 2019-07-04 16:52:40 2019-07-04 16:54:21 101 88 18902 0 276
212 1562230480003 8 2019-07-04 16:54:40 2019-07-04 16:56:25 105 89 18900 2 284
213 1562230600003 8 2019-07-04 16:56:40 2019-07-04 16:58:19 99 83 18902 0 290
214 1562230720002 8 2019-07-04 16:58:40 2019-07-04 17:00:57 137 97 18894 8 282
215 1562230860003 8 2019-07-04 17:01:00 2019-07-04 17:02:40 100 85 18901 1 264
216 1562230980002 8 2019-07-04 17:03:00 2019-07-04 17:04:50 110 97 18902 0 296
217 1562231100003 8 2019-07-04 17:05:00 2019-07-04 17:06:58 118 102 18902 0 267
218 1562231220003 8 2019-07-04 17:07:00 2019-07-04 17:09:00 120 103 18902 0 289
219 1562231380003 8 2019-07-04 17:09:40 2019-07-04 17:11:37 117 101 18902 0 360
220 1562231500003 8 2019-07-04 17:11:40 2019-07-04 17:13:46 126 100 18901 1 347
221 1562231640003 8 2019-07-04 17:14:00 2019-07-04 17:16:21 141 122 18901 1 342
222 1562231800003 8 2019-07-04 17:16:40 2019-07-04 17:18:52 132 113 18902 0 354
223 1562231940003 8 2019-07-04 17:19:00 2019-07-04 17:20:56 116 97 18901 1 349
224 1562232060003 8 2019-07-04 17:21:00 2019-07-04 17:22:51 111 93 18902 0 352
225 1562232180003 8 2019-07-04 17:23:00 2019-07-04 17:24:44 104 87 18902 0 375
226 1562232300002 8 2019-07-04 17:25:00 2019-07-04 17:27:01 121 91 18899 3 385
227 1562232460002 8 2019-07-04 17:27:40 2019-07-04 17:29:30 110 91 18902 0 390
228 1562232580002 8 2019-07-04 17:29:40 2019-07-04 17:31:47 127 105 18900 2 407
229 1562232720003 8 2019-07-04 17:32:00 2019-07-04 17:33:46 105 86 18902 0 415
230 1562232840003 8 2019-07-04 17:34:00 2019-07-04 17:35:54 114 82 18901 1 431
231 1562232960003 8 2019-07-04 17:36:00 2019-07-04 17:37:56 116 93 18901 1 468
232 1562233080003 8 2019-07-04 17:38:00 2019-07-04 17:39:45 105 82 18902 0 499
233 1562233200003 8 2019-07-04 17:40:00 2019-07-04 17:41:47 107 85 18902 0 490
234 1562233320002 8 2019-07-04 17:42:00 2019-07-04 17:43:55 115 89 18902 0 499
235 1562233440002 8 2019-07-04 17:44:00 2019-07-04 17:45:42 102 78 18902 0 491
236 1562233560003 8 2019-07-04 17:46:00 2019-07-04 17:47:49 109 84 18902 0 506
237 1562233680002 8 2019-07-04 17:48:00 2019-07-04 17:49:46 106 80 18902 0 521
238 1562233800002 8 2019-07-04 17:50:00 2019-07-04 17:51:49 109 83 18902 0 547
239 1562233920003 8 2019-07-04 17:52:00 2019-07-04 17:53:48 108 81 18902 0 558
240 1562234040003 8 2019-07-04 17:54:00 2019-07-04 17:55:51 111 84 18902 0 557
241 1562234160002 8 2019-07-04 17:56:00 2019-07-04 17:57:51 111 82 18902 0 574
242 1562234280002 8 2019-07-04 17:58:00 2019-07-04 17:59:51 111 80 18902 0 613
243 1562234400003 8 2019-07-04 18:00:00 2019-07-04 18:01:58 118 84 18899 3 577
244 1562234520003 8 2019-07-04 18:02:00 2019-07-04 18:03:45 105 78 18902 0 568
245 1562234640003 8 2019-07-04 18:04:00 2019-07-04 18:05:47 107 78 18902 0 554
246 1562234760003 8 2019-07-04 18:06:00 2019-07-04 18:07:47 107 78 18902 0 561
247 1562234880002 8 2019-07-04 18:08:00 2019-07-04 18:09:46 106 81 18902 0 533
248 1562235000003 8 2019-07-04 18:10:00 2019-07-04 18:11:47 107 81 18902 0 530
249 1562235120002 8 2019-07-04 18:12:00 2019-07-04 18:13:48 108 80 18902 0 571
250 1562235240002 8 2019-07-04 18:14:00 2019-07-04 18:15:52 112 81 18902 0 582
251 1562235360003 8 2019-07-04 18:16:00 2019-07-04 18:17:50 110 81 18902 0 602
252 1562235480003 8 2019-07-04 18:18:00 2019-07-04 18:19:48 108 80 18902 0 571
253 1562235600002 8 2019-07-04 18:20:00 2019-07-04 18:21:52 112 81 18902 0 588
254 1562235720003 8 2019-07-04 18:22:00 2019-07-04 18:23:53 113 84 18902 0 588
255 1562235840003 8 2019-07-04 18:24:00 2019-07-04 18:25:48 108 79 18902 0 565
256 1562235960002 8 2019-07-04 18:26:00 2019-07-04 18:27:51 111 81 18902 0 577
257 1562236080003 8 2019-07-04 18:28:00 2019-07-04 18:29:48 108 81 18902 0 558
258 1562236200003 8 2019-07-04 18:30:00 2019-07-04 18:31:50 110 82 18902 0 555
259 1562236320002 8 2019-07-04 18:32:00 2019-07-04 18:33:50 110 82 18902 0 547
260 1562236440004 8 2019-07-04 18:34:00 2019-07-04 18:35:46 106 80 18902 0 546
261 1562236560003 8 2019-07-04 18:36:00 2019-07-04 18:37:51 111 84 18902 0 508
262 1562236680003 8 2019-07-04 18:38:00 2019-07-04 18:39:46 106 81 18902 0 509
263 1562236800003 8 2019-07-04 18:40:00 2019-07-04 18:41:54 114 83 18901 1 511
264 1562236920003 8 2019-07-04 18:42:00 2019-07-04 18:43:49 109 83 18902 0 517
265 1562237040003 8 2019-07-04 18:44:00 2019-07-04 18:45:45 105 81 18902 0 493
266 1562237160003 8 2019-07-04 18:46:00 2019-07-04 18:47:45 105 81 18902 0 498
267 1562237280003 8 2019-07-04 18:48:00 2019-07-04 18:49:47 107 82 18902 0 482
268 1562237400002 8 2019-07-04 18:50:00 2019-07-04 18:51:44 104 80 18902 0 466
269 1562237520003 8 2019-07-04 18:52:00 2019-07-04 18:53:44 104 81 18902 0 458
270 1562237640003 8 2019-07-04 18:54:00 2019-07-04 18:55:42 102 80 18902 0 458
271 1562237760002 8 2019-07-04 18:56:00 2019-07-04 18:57:42 102 80 18902 0 453
272 1562237880003 8 2019-07-04 18:58:00 2019-07-04 18:59:44 104 84 18902 0 440
273 1562238000002 8 2019-07-04 19:00:00 2019-07-04 19:01:41 101 81 18902 0 403
274 1562238120003 8 2019-07-04 19:02:00 2019-07-04 19:03:41 101 83 18902 0 381
275 1562238240002 8 2019-07-04 19:04:00 2019-07-04 19:05:41 101 84 18902 0 349
276 1562238360002 8 2019-07-04 19:06:00 2019-07-04 19:07:37 97 79 18902 0 352
277 1562238460003 8 2019-07-04 19:07:40 2019-07-04 19:09:16 96 79 18902 0 329
278 1562238580002 8 2019-07-04 19:09:40 2019-07-04 19:11:18 98 81 18902 0 354
279 1562238700002 8 2019-07-04 19:11:40 2019-07-04 19:13:17 97 82 18902 0 329
280 1562238820003 8 2019-07-04 19:13:40 2019-07-04 19:15:15 95 81 18902 0 320
281 1562238940002 8 2019-07-04 19:15:40 2019-07-04 19:17:15 95 82 18902 0 296
282 1562239060002 8 2019-07-04 19:17:40 2019-07-04 19:19:17 97 83 18902 0 303
283 1562239180003 8 2019-07-04 19:19:40 2019-07-04 19:21:17 97 82 18902 0 311
284 1562239300002 8 2019-07-04 19:21:40 2019-07-04 19:23:16 96 81 18902 0 304
285 1562239420003 8 2019-07-04 19:23:40 2019-07-04 19:25:12 92 78 18902 0 314
286 1562239540003 8 2019-07-04 19:25:40 2019-07-04 19:27:13 93 80 18902 0 280
287 1562239660003 8 2019-07-04 19:27:40 2019-07-04 19:29:11 91 77 18902 0 299
288 1562239780002 8 2019-07-04 19:29:40 2019-07-04 19:31:14 94 80 18902 0 312
289 1562239900002 8 2019-07-04 19:31:40 2019-07-04 19:33:15 95 83 18902 0 269
290 1562240020002 8 2019-07-04 19:33:40 2019-07-04 19:35:14 94 82 18902 0 264
291 1562240140003 8 2019-07-04 19:35:40 2019-07-04 19:37:18 98 84 18902 0 243
292 1562240260002 8 2019-07-04 19:37:40 2019-07-04 19:39:14 94 82 18902 0 262
293 1562240380003 8 2019-07-04 19:39:40 2019-07-04 19:41:16 96 84 18902 0 275
294 1562240500003 8 2019-07-04 19:41:40 2019-07-04 19:43:18 98 85 18902 0 269
295 1562240620003 8 2019-07-04 19:43:40 2019-07-04 19:45:16 96 83 18902 0 268
296 1562240740003 8 2019-07-04 19:45:40 2019-07-04 19:47:15 95 82 18902 0 258
297 1562240860003 8 2019-07-04 19:47:40 2019-07-04 19:49:18 98 85 18902 0 261
298 1562240980002 8 2019-07-04 19:49:40 2019-07-04 19:51:16 96 83 18902 0 264
299 1562241100003 8 2019-07-04 19:51:40 2019-07-04 19:53:13 93 81 18902 0 256
300 1562241220003 8 2019-07-04 19:53:40 2019-07-04 19:55:14 94 82 18902 0 280
301 1562241340002 8 2019-07-04 19:55:40 2019-07-04 19:57:15 95 82 18902 0 278
302 1562241460003 8 2019-07-04 19:57:40 2019-07-04 19:59:12 92 80 18902 0 265
303 1562241580003 8 2019-07-04 19:59:40 2019-07-04 20:01:14 94 82 18902 0 258
304 1562241700003 8 2019-07-04 20:01:40 2019-07-04 20:03:14 94 82 18902 0 265
305 1562241820003 8 2019-07-04 20:03:40 2019-07-04 20:05:12 92 81 18902 0 266
306 1562241940003 8 2019-07-04 20:05:40 2019-07-04 20:07:16 96 81 18902 0 296
307 1562242060002 8 2019-07-04 20:07:40 2019-07-04 20:09:15 95 80 18902 0 296
308 1562242180002 8 2019-07-04 20:09:40 2019-07-04 20:11:17 97 82 18902 0 306
309 1562242300003 8 2019-07-04 20:11:40 2019-07-04 20:13:16 96 83 18902 0 291
310 1562242420003 8 2019-07-04 20:13:40 2019-07-04 20:15:12 92 80 18902 0 267
311 1562242540002 8 2019-07-04 20:15:40 2019-07-04 20:17:11 91 79 18902 0 255
312 1562242660003 8 2019-07-04 20:17:40 2019-07-04 20:19:16 96 83 18902 0 273
313 1562242780003 8 2019-07-04 20:19:40 2019-07-04 20:21:14 94 82 18902 0 284
314 1562242900002 8 2019-07-04 20:21:40 2019-07-04 20:23:15 95 81 18902 0 260
315 1562243020003 8 2019-07-04 20:23:40 2019-07-04 20:25:12 92 80 18902 0 266
316 1562243140003 8 2019-07-04 20:25:40 2019-07-04 20:27:18 98 87 18902 0 269
317 1562243260008 8 2019-07-04 20:27:40 2019-07-04 20:29:18 98 86 18902 0 297
318 1562243380003 8 2019-07-04 20:29:40 2019-07-04 20:31:20 100 87 18902 0 289
319 1562243500002 8 2019-07-04 20:31:40 2019-07-04 20:33:16 96 83 18902 0 264
320 1562243620002 8 2019-07-04 20:33:40 2019-07-04 20:35:16 96 83 18902 0 278
321 1562243740002 8 2019-07-04 20:35:40 2019-07-04 20:37:15 95 82 18902 0 269
322 1562243860003 8 2019-07-04 20:37:40 2019-07-04 20:39:13 93 81 18902 0 264
323 1562243980002 8 2019-07-04 20:39:40 2019-07-04 20:41:16 96 84 18902 0 236
324 1562244100002 8 2019-07-04 20:41:40 2019-07-04 20:43:16 96 84 18902 0 248
325 1562244220002 8 2019-07-04 20:43:40 2019-07-04 20:45:14 94 82 18902 0 273
326 1562244340002 8 2019-07-04 20:45:40 2019-07-04 20:47:12 92 79 18902 0 256
327 1562244460004 8 2019-07-04 20:47:40 2019-07-04 20:49:15 95 82 18902 0 274
328 1562244580003 8 2019-07-04 20:49:40 2019-07-04 20:51:15 95 82 18902 0 284
329 1562244700002 8 2019-07-04 20:51:40 2019-07-04 20:53:15 95 83 18902 0 276
330 1562244820002 8 2019-07-04 20:53:40 2019-07-04 20:55:15 95 83 18902 0 235
331 1562244940003 8 2019-07-04 20:55:40 2019-07-04 20:57:12 92 80 18902 0 250
332 1562245060003 8 2019-07-04 20:57:40 2019-07-04 20:59:13 93 80 18902 0 273
333 1562245180003 8 2019-07-04 20:59:40 2019-07-04 21:01:10 90 78 18902 0 259
334 1562245300002 8 2019-07-04 21:01:40 2019-07-04 21:03:13 93 80 18902 0 214
335 1562245420002 8 2019-07-04 21:03:40 2019-07-04 21:05:11 91 79 18902 0 226
336 1562245540002 8 2019-07-04 21:05:40 2019-07-04 21:07:15 95 84 18902 0 237
337 1562245660002 8 2019-07-04 21:07:40 2019-07-04 21:09:11 91 80 18902 0 219
338 1562245780003 8 2019-07-04 21:09:40 2019-07-04 21:11:19 99 87 18902 0 236
339 1562245900002 8 2019-07-04 21:11:40 2019-07-04 21:13:10 90 81 18902 0 220
340 1562246020003 8 2019-07-04 21:13:40 2019-07-04 21:15:13 93 81 18902 0 222
341 1562246140003 8 2019-07-04 21:15:40 2019-07-04 21:17:10 90 79 18902 0 197
342 1562246260003 8 2019-07-04 21:17:40 2019-07-04 21:19:11 91 79 18902 0 218
343 1562246380002 8 2019-07-04 21:19:40 2019-07-04 21:21:15 95 83 18902 0 212
344 1562246500003 8 2019-07-04 21:21:40 2019-07-04 21:23:14 94 82 18902 0 199
345 1562246620002 8 2019-07-04 21:23:40 2019-07-04 21:25:14 94 82 18902 0 208
346 1562246740003 8 2019-07-04 21:25:40 2019-07-04 21:27:14 94 83 18902 0 212
347 1562246860003 8 2019-07-04 21:27:40 2019-07-04 21:29:14 94 83 18902 0 211
348 1562246980003 8 2019-07-04 21:29:40 2019-07-04 21:31:16 96 85 18902 0 207
349 1562247100003 8 2019-07-04 21:31:40 2019-07-04 21:33:19 99 87 18902 0 212
350 1562247220002 8 2019-07-04 21:33:40 2019-07-04 21:35:20 100 89 18902 0 193
351 1562247340002 8 2019-07-04 21:35:40 2019-07-04 21:37:23 103 91 18902 0 198
352 1562247460002 8 2019-07-04 21:37:40 2019-07-04 21:39:16 96 85 18902 0 206
353 1562247580002 8 2019-07-04 21:39:40 2019-07-04 21:41:13 93 81 18902 0 223
354 1562247700002 8 2019-07-04 21:41:40 2019-07-04 21:43:14 94 82 18902 0 210
355 1562247820002 8 2019-07-04 21:43:40 2019-07-04 21:45:13 93 81 18902 0 209
356 1562247940002 8 2019-07-04 21:45:40 2019-07-04 21:47:09 89 78 18902 0 191
357 1562248060003 8 2019-07-04 21:47:40 2019-07-04 21:49:12 92 81 18902 0 187
358 1562248180002 8 2019-07-04 21:49:40 2019-07-04 21:51:11 91 80 18902 0 181
359 1562248300003 8 2019-07-04 21:51:40 2019-07-04 21:53:13 93 82 18902 0 185
360 1562248420003 8 2019-07-04 21:53:40 2019-07-04 21:55:12 92 81 18902 0 173
361 1562248540002 8 2019-07-04 21:55:40 2019-07-04 21:57:06 86 77 18902 0 158
362 1562248660034 8 2019-07-04 21:57:40 2019-07-04 21:59:12 92 82 18902 0 178
363 1562248780002 8 2019-07-04 21:59:40 2019-07-04 22:01:14 94 83 18902 0 182
364 1562248900002 8 2019-07-04 22:01:40 2019-07-04 22:03:12 92 79 18902 0 195
365 1562249020002 8 2019-07-04 22:03:40 2019-07-04 22:05:10 90 80 18902 0 189
366 1562249140003 8 2019-07-04 22:05:40 2019-07-04 22:07:13 93 82 18902 0 171
367 1562249260002 8 2019-07-04 22:07:40 2019-07-04 22:09:19 99 88 18902 0 170
368 1562249380002 8 2019-07-04 22:09:40 2019-07-04 22:11:16 96 87 18902 0 173
369 1562249500003 8 2019-07-04 22:11:40 2019-07-04 22:13:19 99 89 18902 0 175
370 1562249620003 8 2019-07-04 22:13:40 2019-07-04 22:15:16 96 86 18902 0 153
371 1562249740002 8 2019-07-04 22:15:40 2019-07-04 22:17:15 95 85 18902 0 171
372 1562249860003 8 2019-07-04 22:17:40 2019-07-04 22:19:12 92 81 18902 0 193
373 1562249980002 8 2019-07-04 22:19:40 2019-07-04 22:21:10 90 80 18902 0 172
374 1562250100002 8 2019-07-04 22:21:40 2019-07-04 22:23:11 91 81 18902 0 158
375 1562250220003 8 2019-07-04 22:23:40 2019-07-04 22:25:10 90 81 18902 0 159
376 1562250340003 8 2019-07-04 22:25:40 2019-07-04 22:27:11 91 82 18902 0 146
377 1562250460002 8 2019-07-04 22:27:40 2019-07-04 22:29:11 91 82 18902 0 153
378 1562250580002 8 2019-07-04 22:29:40 2019-07-04 22:31:07 87 78 18902 0 132
379 1562250700003 8 2019-07-04 22:31:40 2019-07-04 22:33:12 92 83 18902 0 131
380 1562250820002 8 2019-07-04 22:33:40 2019-07-04 22:35:13 93 84 18902 0 133
381 1562250940003 8 2019-07-04 22:35:40 2019-07-04 22:37:16 96 86 18902 0 143
382 1562251060002 8 2019-07-04 22:37:40 2019-07-04 22:39:15 95 84 18902 0 145
383 1562251180003 8 2019-07-04 22:39:40 2019-07-04 22:41:13 93 83 18902 0 142
384 1562251300003 8 2019-07-04 22:41:40 2019-07-04 22:43:10 90 80 18902 0 127
385 1562251420004 8 2019-07-04 22:43:40 2019-07-04 22:45:08 88 78 18902 0 140
386 1562251540004 8 2019-07-04 22:45:40 2019-07-04 22:47:09 89 78 18902 0 145
387 1562251660003 8 2019-07-04 22:47:40 2019-07-04 22:49:11 91 81 18902 0 142
388 1562251780002 8 2019-07-04 22:49:40 2019-07-04 22:51:08 88 78 18902 0 137
389 1562251900003 8 2019-07-04 22:51:40 2019-07-04 22:53:15 95 86 18902 0 142
390 1562252020004 8 2019-07-04 22:53:40 2019-07-04 22:55:10 90 81 18902 0 138
391 1562252140002 8 2019-07-04 22:55:40 2019-07-04 22:57:08 88 79 18902 0 136
392 1562252260004 8 2019-07-04 22:57:40 2019-07-04 22:59:13 93 84 18902 0 141
393 1562252380005 8 2019-07-04 22:59:40 2019-07-04 23:01:13 93 84 18902 0 117
394 1562252500005 8 2019-07-04 23:01:40 2019-07-04 23:03:12 92 82 18902 0 124
395 1562252620003 8 2019-07-04 23:03:40 2019-07-04 23:05:13 93 83 18902 0 118
396 1562252740002 8 2019-07-04 23:05:40 2019-07-04 23:07:11 91 82 18902 0 106
397 1562252860002 8 2019-07-04 23:07:40 2019-07-04 23:09:11 91 81 18902 0 125
398 1562252980003 8 2019-07-04 23:09:40 2019-07-04 23:11:11 91 81 18902 0 144
399 1562253100002 8 2019-07-04 23:11:40 2019-07-04 23:13:13 93 83 18902 0 141
400 1562253220005 8 2019-07-04 23:13:40 2019-07-04 23:15:15 95 86 18902 0 135
401 1562253340004 8 2019-07-04 23:15:40 2019-07-04 23:17:16 96 86 18902 0 141
402 1562253460005 8 2019-07-04 23:17:40 2019-07-04 23:19:12 92 83 18902 0 126
403 1562253580004 8 2019-07-04 23:19:40 2019-07-04 23:21:11 91 82 18902 0 118
404 1562253700003 8 2019-07-04 23:21:40 2019-07-04 23:23:10 90 82 18902 0 107
405 1562253820006 8 2019-07-04 23:23:40 2019-07-04 23:25:10 90 80 18902 0 123
406 1562253940005 8 2019-07-04 23:25:40 2019-07-04 23:27:09 89 81 18902 0 105
407 1562254060006 8 2019-07-04 23:27:40 2019-07-04 23:29:14 94 85 18902 0 106
408 1562254180008 8 2019-07-04 23:29:40 2019-07-04 23:31:13 93 85 18902 0 109
409 1562254300005 8 2019-07-04 23:31:40 2019-07-04 23:33:13 93 85 18902 0 89
410 1562254420003 8 2019-07-04 23:33:40 2019-07-04 23:35:13 93 85 18902 0 93
411 1562254540006 8 2019-07-04 23:35:40 2019-07-04 23:37:13 93 85 18902 0 99
412 1562254660006 8 2019-07-04 23:37:40 2019-07-04 23:39:10 90 81 18902 0 107
413 1562254780004 8 2019-07-04 23:39:40 2019-07-04 23:41:08 88 79 18902 0 108
414 1562254900005 8 2019-07-04 23:41:40 2019-07-04 23:43:05 85 76 18902 0 112
415 1562255020004 8 2019-07-04 23:43:40 2019-07-04 23:45:10 90 81 18902 0 116
416 1562255140004 8 2019-07-04 23:45:40 2019-07-04 23:47:10 90 81 18902 0 122
417 1562255260005 8 2019-07-04 23:47:40 2019-07-04 23:49:12 92 82 18902 0 110
418 1562255380004 8 2019-07-04 23:49:40 2019-07-04 23:51:15 95 86 18902 0 126
419 1562255500005 8 2019-07-04 23:51:40 2019-07-04 23:53:15 95 86 18902 0 121
420 1562255620004 8 2019-07-04 23:53:40 2019-07-04 23:55:13 93 84 18902 0 110
421 1562255740005 8 2019-07-04 23:55:40 2019-07-04 23:57:10 90 81 18902 0 116
422 1562255860005 8 2019-07-04 23:57:40 2019-07-04 23:59:07 87 78 18902 0 128
423 1562255980005 8 2019-07-04 23:59:40 2019-07-05 00:01:07 87 79 18902 0 110
424 1562256100005 8 2019-07-05 00:01:40 2019-07-05 00:03:07 87 79 18902 0 97
425 1562256220005 8 2019-07-05 00:03:40 2019-07-05 00:05:09 89 81 18902 0 105
426 1562256340006 8 2019-07-05 00:05:40 2019-07-05 00:07:08 88 80 18902 0 97
427 1562256460006 8 2019-07-05 00:07:40 2019-07-05 00:09:09 89 80 18902 0 102
428 1562256580005 8 2019-07-05 00:09:40 2019-07-05 00:11:05 85 77 18902 0 101
429 1562256700006 8 2019-07-05 00:11:40 2019-07-05 00:13:08 88 81 18902 0 92
430 1562256820005 8 2019-07-05 00:13:40 2019-07-05 00:15:08 88 81 18902 0 93
431 1562256940005 8 2019-07-05 00:15:40 2019-07-05 00:17:06 86 78 18902 0 85
432 1562257060006 8 2019-07-05 00:17:40 2019-07-05 00:19:10 90 82 18902 0 84
433 1562257180006 8 2019-07-05 00:19:40 2019-07-05 00:21:09 89 81 18902 0 89
434 1562257300005 8 2019-07-05 00:21:40 2019-07-05 00:23:03 83 75 18902 0 83
435 1562257420005 8 2019-07-05 00:23:40 2019-07-05 00:25:05 85 77 18902 0 89
436 1562257540004 8 2019-07-05 00:25:40 2019-07-05 00:27:05 85 77 18902 0 96
437 1562257660005 8 2019-07-05 00:27:40 2019-07-05 00:29:15 95 87 18902 0 107
438 1562257780003 8 2019-07-05 00:29:40 2019-07-05 00:31:15 95 87 18902 0 97
439 1562257900005 8 2019-07-05 00:31:40 2019-07-05 00:33:16 96 86 18902 0 107
440 1562258020005 8 2019-07-05 00:33:40 2019-07-05 00:35:13 93 84 18902 0 111
441 1562258140005 8 2019-07-05 00:35:40 2019-07-05 00:37:10 90 82 18902 0 99
442 1562258260005 8 2019-07-05 00:37:40 2019-07-05 00:39:10 90 82 18902 0 92
443 1562258380004 8 2019-07-05 00:39:40 2019-07-05 00:41:11 91 83 18902 0 109
444 1562258500013 8 2019-07-05 00:41:40 2019-07-05 00:43:11 91 82 18902 0 105
445 1562258620292 8 2019-07-05 00:43:40 2019-07-05 00:45:08 88 80 18902 0 105
446 1562258740004 8 2019-07-05 00:45:40 2019-07-05 00:47:00 80 72 18902 0 106
447 1562258860002 8 2019-07-05 00:47:40 2019-07-05 00:49:15 95 86 18902 0 102
448 1562258980004 8 2019-07-05 00:49:40 2019-07-05 00:51:10 90 82 18902 0 105
449 1562259100004 8 2019-07-05 00:51:40 2019-07-05 00:53:08 88 80 18902 0 78
450 1562259220002 8 2019-07-05 00:53:40 2019-07-05 00:55:10 90 83 18902 0 83
451 1562259340004 8 2019-07-05 00:55:40 2019-07-05 00:57:11 91 84 18902 0 80
452 1562259460004 8 2019-07-05 00:57:40 2019-07-05 00:59:12 92 85 18902 0 76
453 1562259580006 8 2019-07-05 00:59:40 2019-07-05 01:01:12 92 84 18902 0 84
454 1562259700005 8 2019-07-05 01:01:40 2019-07-05 01:03:12 92 84 18902 0 88
455 1562259820005 8 2019-07-05 01:03:40 2019-07-05 01:05:09 89 81 18902 0 83
456 1562259940004 8 2019-07-05 01:05:40 2019-07-05 01:07:12 92 84 18902 0 97
457 1562260060005 8 2019-07-05 01:07:40 2019-07-05 01:09:16 95 87 18902 0 98
458 1562260180004 8 2019-07-05 01:09:40 2019-07-05 01:11:14 94 86 18902 0 88
459 1562260300005 8 2019-07-05 01:11:40 2019-07-05 01:13:12 92 84 18902 0 101
460 1562260420005 8 2019-07-05 01:13:40 2019-07-05 01:15:12 92 84 18902 0 107
461 1562260540004 8 2019-07-05 01:15:40 2019-07-05 01:17:13 93 85 18902 0 102
462 1562260660004 8 2019-07-05 01:17:40 2019-07-05 01:19:16 96 88 18902 0 96
463 1562260780004 8 2019-07-05 01:19:40 2019-07-05 01:21:18 98 90 18902 0 97
464 1562260900004 8 2019-07-05 01:21:40 2019-07-05 01:23:15 95 87 18902 0 91
465 1562261020005 8 2019-07-05 01:23:40 2019-07-05 01:25:13 93 85 18902 0 97
466 1562261140004 8 2019-07-05 01:25:40 2019-07-05 01:27:13 93 85 18902 0 93
467 1562261260005 8 2019-07-05 01:27:40 2019-07-05 01:29:12 92 85 18902 0 82
468 1562261380005 8 2019-07-05 01:29:40 2019-07-05 01:31:07 87 79 18902 0 82
469 1562261500005 8 2019-07-05 01:31:40 2019-07-05 01:33:12 92 85 18902 0 74
470 1562261620007 8 2019-07-05 01:33:40 2019-07-05 01:35:11 91 83 18902 0 74
471 1562261740005 8 2019-07-05 01:35:40 2019-07-05 01:37:12 92 85 18902 0 85
472 1562261860006 8 2019-07-05 01:37:40 2019-07-05 01:39:16 96 88 18902 0 96
473 1562261980005 8 2019-07-05 01:39:40 2019-07-05 01:41:12 92 84 18902 0 72
474 1562262100004 8 2019-07-05 01:41:40 2019-07-05 01:43:10 90 82 18902 0 81
475 1562262220004 8 2019-07-05 01:43:40 2019-07-05 01:45:05 85 78 18902 0 83
476 1562262340007 8 2019-07-05 01:45:40 2019-07-05 01:47:04 84 77 18902 0 75
477 1562262460010 8 2019-07-05 01:47:40 2019-07-05 01:49:17 97 90 18902 0 77
478 1562262580007 8 2019-07-05 01:49:40 2019-07-05 01:51:13 93 85 18902 0 97
479 1562262700005 8 2019-07-05 01:51:40 2019-07-05 01:53:13 93 86 18902 0 85
480 1562262954308 8 2019-07-05 01:55:54 2019-07-05 01:57:24 90 81 18902 0 75
481 1562263060006 8 2019-07-05 01:57:40 2019-07-05 01:59:07 87 80 18902 0 78
482 1562263180006 8 2019-07-05 01:59:40 2019-07-05 02:01:12 92 85 18902 0 86
483 1562263300006 8 2019-07-05 02:01:40 2019-07-05 02:03:12 92 84 18902 0 88
484 1562263420005 8 2019-07-05 02:03:40 2019-07-05 02:05:08 88 80 18902 0 89
485 1562263540008 8 2019-07-05 02:05:40 2019-07-05 02:07:06 86 77 18902 0 92
486 1562263660005 8 2019-07-05 02:07:40 2019-07-05 02:09:03 83 76 18902 0 90
487 1562263780006 8 2019-07-05 02:09:40 2019-07-05 02:11:15 95 88 18902 0 83
488 1562263900003 8 2019-07-05 02:11:40 2019-07-05 02:13:17 97 88 18902 0 83
489 1562264020005 8 2019-07-05 02:13:40 2019-07-05 02:15:12 92 84 18902 0 94
490 1562264140005 8 2019-07-05 02:15:40 2019-07-05 02:17:11 91 83 18902 0 91
491 1562264260005 8 2019-07-05 02:17:40 2019-07-05 02:19:10 90 83 18902 0 83
492 1562264380004 8 2019-07-05 02:19:40 2019-07-05 02:21:10 90 83 18902 0 82
493 1562264500004 8 2019-07-05 02:21:40 2019-07-05 02:23:11 91 83 18902 0 90
494 1562264620006 8 2019-07-05 02:23:40 2019-07-05 02:25:11 91 83 18902 0 82
495 1562264740007 8 2019-07-05 02:25:40 2019-07-05 02:27:11 91 83 18902 0 81
496 1562264860005 8 2019-07-05 02:27:40 2019-07-05 02:29:11 91 83 18902 0 86
497 1562264980010 8 2019-07-05 02:29:40 2019-07-05 02:31:10 90 83 18902 0 90
498 1562265100006 8 2019-07-05 02:31:40 2019-07-05 02:33:12 92 83 18902 0 89
499 1562265220006 8 2019-07-05 02:33:40 2019-07-05 02:35:11 91 83 18902 0 85
500 1562265340008 8 2019-07-05 02:35:40 2019-07-05 02:37:13 93 84 18902 0 90
501 1562265460006 8 2019-07-05 02:37:40 2019-07-05 02:39:13 93 86 18902 0 74
502 1562265580006 8 2019-07-05 02:39:40 2019-07-05 02:41:14 94 86 18902 0 91
503 1562265700004 8 2019-07-05 02:41:40 2019-07-05 02:43:14 94 85 18902 0 97
504 1562265820005 8 2019-07-05 02:43:40 2019-07-05 02:45:11 91 82 18902 0 99
505 1562265940004 8 2019-07-05 02:45:40 2019-07-05 02:47:02 82 75 18902 0 108
506 1562266060005 8 2019-07-05 02:47:40 2019-07-05 02:49:08 88 80 18902 0 107
507 1562266180006 8 2019-07-05 02:49:40 2019-07-05 02:51:08 88 80 18902 0 98
508 1562266300003 8 2019-07-05 02:51:40 2019-07-05 02:53:07 87 78 18902 0 107
509 1562266420003 8 2019-07-05 02:53:40 2019-07-05 02:55:04 84 77 18902 0 88
510 1562266540003 8 2019-07-05 02:55:40 2019-07-05 02:57:03 83 74 18902 0 107
511 1562266660006 8 2019-07-05 02:57:40 2019-07-05 02:59:13 93 85 18902 0 92
512 1562266780005 8 2019-07-05 02:59:40 2019-07-05 03:01:10 90 83 18902 0 90
513 1562266900006 8 2019-07-05 03:01:40 2019-07-05 03:03:13 93 85 18902 0 100
514 1562267020031 8 2019-07-05 03:03:40 2019-07-05 03:05:13 93 85 18902 0 101
515 1562267140284 8 2019-07-05 03:05:40 2019-07-05 03:07:15 94 87 18902 0 89
516 1562267260005 8 2019-07-05 03:07:40 2019-07-05 03:09:16 96 88 18902 0 87
517 1562267380273 8 2019-07-05 03:09:40 2019-07-05 03:11:16 96 87 18902 0 97
518 1562267500290 8 2019-07-05 03:11:40 2019-07-05 03:13:14 94 86 18902 0 92
519 1562267620291 8 2019-07-05 03:13:40 2019-07-05 03:15:14 93 86 18902 0 92
520 1562267740004 8 2019-07-05 03:15:40 2019-07-05 03:17:08 88 80 18902 0 79
521 1562267860005 8 2019-07-05 03:17:40 2019-07-05 03:19:03 83 76 18902 0 63
522 1562267980004 8 2019-07-05 03:19:40 2019-07-05 03:21:07 87 80 18902 0 52
523 1562268100005 8 2019-07-05 03:21:40 2019-07-05 03:23:06 86 79 18902 0 55
524 1562268220005 8 2019-07-05 03:23:40 2019-07-05 03:25:02 82 75 18902 0 55
525 1562268340005 8 2019-07-05 03:25:40 2019-07-05 03:27:04 84 77 18902 0 63
526 1562268460004 8 2019-07-05 03:27:40 2019-07-05 03:29:06 86 79 18902 0 67
527 1562268580005 8 2019-07-05 03:29:40 2019-07-05 03:31:10 90 83 18902 0 51
528 1562268700005 8 2019-07-05 03:31:40 2019-07-05 03:33:10 90 82 18902 0 66
529 1562268820005 8 2019-07-05 03:33:40 2019-07-05 03:35:11 91 84 18902 0 63
530 1562268940004 8 2019-07-05 03:35:40 2019-07-05 03:37:12 92 85 18902 0 51
531 1562269060003 8 2019-07-05 03:37:40 2019-07-05 03:39:12 92 85 18902 0 62
532 1562269180006 8 2019-07-05 03:39:40 2019-07-05 03:41:13 93 85 18902 0 61
533 1562269300041 8 2019-07-05 03:41:40 2019-07-05 03:43:12 92 85 18902 0 61
534 1562269420005 8 2019-07-05 03:43:40 2019-07-05 03:45:12 92 85 18902 0 71
535 1562269540005 8 2019-07-05 03:45:40 2019-07-05 03:47:12 92 85 18902 0 67
536 1562269660005 8 2019-07-05 03:47:40 2019-07-05 03:49:11 91 84 18902 0 79
537 1562269780005 8 2019-07-05 03:49:40 2019-07-05 03:51:11 91 83 18902 0 74
538 1562269900004 8 2019-07-05 03:51:40 2019-07-05 03:53:11 91 83 18902 0 81
539 1562270020005 8 2019-07-05 03:53:40 2019-07-05 03:55:11 91 83 18902 0 80
540 1562270140005 8 2019-07-05 03:55:40 2019-07-05 03:57:11 91 83 18902 0 73
541 1562270260305 8 2019-07-05 03:57:40 2019-07-05 03:59:09 88 81 18902 0 67
542 1562270380004 8 2019-07-05 03:59:40 2019-07-05 04:01:08 88 80 18902 0 59
543 1562270500005 8 2019-07-05 04:01:40 2019-07-05 04:03:10 90 83 18902 0 60
544 1562270620003 8 2019-07-05 04:03:40 2019-07-05 04:05:11 91 83 18902 0 70
545 1562270740003 8 2019-07-05 04:05:40 2019-07-05 04:07:11 91 83 18902 0 67
546 1562270860004 8 2019-07-05 04:07:40 2019-07-05 04:09:11 91 82 18902 0 74
547 1562270980007 8 2019-07-05 04:09:40 2019-07-05 04:11:11 91 83 18902 0 74
548 1562271100006 8 2019-07-05 04:11:40 2019-07-05 04:13:12 92 83 18902 0 67
549 1562271220003 8 2019-07-05 04:13:40 2019-07-05 04:15:11 91 84 18902 0 61
550 1562271340003 8 2019-07-05 04:15:40 2019-07-05 04:17:13 93 86 18902 0 73
551 1562271460005 8 2019-07-05 04:17:40 2019-07-05 04:19:16 96 88 18902 0 74
552 1562271580010 8 2019-07-05 04:19:40 2019-07-05 04:21:14 94 86 18902 0 78
553 1562271700004 8 2019-07-05 04:21:40 2019-07-05 04:23:12 92 85 18902 0 83
554 1562271820005 8 2019-07-05 04:23:40 2019-07-05 04:25:12 92 84 18902 0 65
555 1562271940004 8 2019-07-05 04:25:40 2019-07-05 04:27:12 92 85 18902 0 75
556 1562272060003 8 2019-07-05 04:27:40 2019-07-05 04:29:13 93 85 18902 0 72
557 1562272180002 8 2019-07-05 04:29:40 2019-07-05 04:31:15 95 87 18902 0 81
558 1562272300005 8 2019-07-05 04:31:40 2019-07-05 04:33:15 95 87 18902 0 88
559 1562272420003 8 2019-07-05 04:33:40 2019-07-05 04:35:14 94 87 18902 0 85
560 1562272540002 8 2019-07-05 04:35:40 2019-07-05 04:37:13 93 85 18902 0 72
561 1562272660005 8 2019-07-05 04:37:40 2019-07-05 04:39:09 89 81 18902 0 70
562 1562272780004 8 2019-07-05 04:39:40 2019-07-05 04:41:07 87 79 18902 0 84
563 1562272900004 8 2019-07-05 04:41:40 2019-07-05 04:43:07 87 79 18902 0 80
564 1562273020005 8 2019-07-05 04:43:40 2019-07-05 04:45:05 85 77 18902 0 76
565 1562273140005 8 2019-07-05 04:45:40 2019-07-05 04:47:11 91 84 18902 0 61
566 1562273260004 8 2019-07-05 04:47:40 2019-07-05 04:49:12 92 84 18902 0 68
567 1562273380288 8 2019-07-05 04:49:40 2019-07-05 04:51:12 92 84 18902 0 63
568 1562273500174 8 2019-07-05 04:51:40 2019-07-05 04:53:12 91 84 18902 0 58
569 1562273620003 8 2019-07-05 04:53:40 2019-07-05 04:55:11 91 84 18902 0 50
570 1562273740003 8 2019-07-05 04:55:40 2019-07-05 04:57:10 90 83 18902 0 57
571 1562273860002 8 2019-07-05 04:57:40 2019-07-05 04:59:10 90 83 18902 0 55
572 1562273980003 8 2019-07-05 04:59:40 2019-07-05 05:01:10 90 82 18902 0 56
573 1562274100002 8 2019-07-05 05:01:40 2019-07-05 05:03:10 90 82 18902 0 62
574 1562274220003 8 2019-07-05 05:03:40 2019-07-05 05:05:14 94 87 18902 0 53
575 1562274340002 8 2019-07-05 05:05:40 2019-07-05 05:07:16 96 88 18902 0 53
576 1562274460003 8 2019-07-05 05:07:40 2019-07-05 05:09:13 93 85 18902 0 55
577 1562274580002 8 2019-07-05 05:09:40 2019-07-05 05:11:10 90 83 18902 0 55
578 1562274700002 8 2019-07-05 05:11:40 2019-07-05 05:13:09 89 81 18902 0 69
579 1562274820003 8 2019-07-05 05:13:40 2019-07-05 05:15:07 87 79 18902 0 57
580 1562274940003 8 2019-07-05 05:15:40 2019-07-05 05:17:08 88 81 18902 0 63
581 1562275060002 8 2019-07-05 05:17:40 2019-07-05 05:19:02 82 75 18902 0 58
582 1562275180002 8 2019-07-05 05:19:40 2019-07-05 05:21:05 85 78 18902 0 51
583 1562275300003 8 2019-07-05 05:21:40 2019-07-05 05:23:06 86 78 18902 0 49
584 1562275420003 8 2019-07-05 05:23:40 2019-07-05 05:25:11 91 84 18902 0 49
585 1562275540003 8 2019-07-05 05:25:40 2019-07-05 05:27:09 89 81 18902 0 53
586 1562275660003 8 2019-07-05 05:27:40 2019-07-05 05:29:11 91 83 18902 0 64
587 1562275780003 8 2019-07-05 05:29:40 2019-07-05 05:31:11 91 83 18902 0 60
588 1562275900002 8 2019-07-05 05:31:40 2019-07-05 05:33:10 90 83 18902 0 52
589 1562276020003 8 2019-07-05 05:33:40 2019-07-05 05:35:09 89 82 18902 0 54
590 1562276140002 8 2019-07-05 05:35:40 2019-07-05 05:37:10 90 83 18902 0 53
591 1562276260003 8 2019-07-05 05:37:40 2019-07-05 05:39:10 90 82 18902 0 74
592 1562276380002 8 2019-07-05 05:39:40 2019-07-05 05:41:10 90 83 18902 0 54
593 1562276500002 8 2019-07-05 05:41:40 2019-07-05 05:43:10 90 83 18902 0 63
594 1562276620003 8 2019-07-05 05:43:40 2019-07-05 05:45:04 84 77 18902 0 68
595 1562276740002 8 2019-07-05 05:45:40 2019-07-05 05:47:08 88 80 18902 0 82
596 1562276860003 8 2019-07-05 05:47:40 2019-07-05 05:49:09 89 82 18902 0 61
597 1562276980003 8 2019-07-05 05:49:40 2019-07-05 05:51:08 88 81 18902 0 60
598 1562277100003 8 2019-07-05 05:51:40 2019-07-05 05:53:04 84 76 18902 0 73
599 1562277220003 8 2019-07-05 05:53:40 2019-07-05 05:55:06 86 79 18902 0 64
600 1562277340002 8 2019-07-05 05:55:40 2019-07-05 05:57:08 88 81 18902 0 79
601 1562277460003 8 2019-07-05 05:57:40 2019-07-05 05:59:07 87 79 18902 0 77
602 1562277580003 8 2019-07-05 05:59:40 2019-07-05 06:01:07 87 79 18902 0 74
603 1562277700003 8 2019-07-05 06:01:40 2019-07-05 06:03:10 90 83 18902 0 74
604 1562277820003 8 2019-07-05 06:03:40 2019-07-05 06:05:10 90 82 18902 0 75
605 1562277940003 8 2019-07-05 06:05:40 2019-07-05 06:07:10 90 82 18902 0 80
606 1562278060002 8 2019-07-05 06:07:40 2019-07-05 06:09:10 90 82 18902 0 73
607 1562278180002 8 2019-07-05 06:09:40 2019-07-05 06:11:04 84 77 18902 0 70
608 1562278300003 8 2019-07-05 06:11:40 2019-07-05 06:13:04 84 76 18902 0 80
609 1562278420002 8 2019-07-05 06:13:40 2019-07-05 06:15:07 87 80 18902 0 97
610 1562278540003 8 2019-07-05 06:15:40 2019-07-05 06:17:09 89 80 18902 0 103
611 1562278660003 8 2019-07-05 06:17:40 2019-07-05 06:19:07 87 79 18902 0 104
612 1562278780003 8 2019-07-05 06:19:40 2019-07-05 06:21:06 86 78 18902 0 65
613 1562278900003 8 2019-07-05 06:21:40 2019-07-05 06:23:13 93 85 18902 0 76
614 1562279020003 8 2019-07-05 06:23:40 2019-07-05 06:25:15 95 86 18902 0 88
615 1562279140003 8 2019-07-05 06:25:40 2019-07-05 06:27:15 95 87 18902 0 101
616 1562279260003 8 2019-07-05 06:27:40 2019-07-05 06:29:14 94 87 18902 0 75
617 1562279380002 8 2019-07-05 06:29:40 2019-07-05 06:31:14 94 86 18902 0 97
618 1562279500003 8 2019-07-05 06:31:40 2019-07-05 06:33:15 95 86 18902 0 97
619 1562279620003 8 2019-07-05 06:33:40 2019-07-05 06:35:11 91 83 18902 0 90
620 1562279740003 8 2019-07-05 06:35:40 2019-07-05 06:37:07 87 78 18902 0 95
621 1562279860003 8 2019-07-05 06:37:40 2019-07-05 06:39:05 85 76 18902 0 86
622 1562279980003 8 2019-07-05 06:39:40 2019-07-05 06:41:12 92 84 18902 0 91
623 1562280100002 8 2019-07-05 06:41:40 2019-07-05 06:43:11 91 83 18902 0 94
624 1562280220002 8 2019-07-05 06:43:40 2019-07-05 06:45:12 92 83 18902 0 91
625 1562280340003 8 2019-07-05 06:45:40 2019-07-05 06:47:11 91 83 18902 0 88
626 1562280460002 8 2019-07-05 06:47:40 2019-07-05 06:49:12 92 83 18902 0 121
627 1562280580003 8 2019-07-05 06:49:40 2019-07-05 06:51:11 91 83 18902 0 97
628 1562280700002 8 2019-07-05 06:51:40 2019-07-05 06:53:10 90 82 18902 0 76
629 1562280820003 8 2019-07-05 06:53:40 2019-07-05 06:55:10 90 82 18902 0 98
630 1562280940002 8 2019-07-05 06:55:40 2019-07-05 06:57:15 95 87 18902 0 114
631 1562281060003 8 2019-07-05 06:57:40 2019-07-05 06:59:15 95 87 18902 0 106
632 1562281180002 8 2019-07-05 06:59:40 2019-07-05 07:01:16 96 88 18902 0 116
633 1562281300003 8 2019-07-05 07:01:40 2019-07-05 07:03:14 94 85 18902 0 123
634 1562281420002 8 2019-07-05 07:03:40 2019-07-05 07:05:08 88 79 18902 0 126
635 1562281540003 8 2019-07-05 07:05:40 2019-07-05 07:07:09 89 80 18902 0 121
636 1562281660002 8 2019-07-05 07:07:40 2019-07-05 07:09:14 94 85 18902 0 137
637 1562281780003 8 2019-07-05 07:09:40 2019-07-05 07:11:13 93 83 18902 0 156
638 1562281900002 8 2019-07-05 07:11:40 2019-07-05 07:13:11 91 80 18902 0 141
639 1562282020003 8 2019-07-05 07:13:40 2019-07-05 07:15:10 90 80 18902 0 167
640 1562282140003 8 2019-07-05 07:15:40 2019-07-05 07:17:13 93 81 18902 0 189
641 1562282260003 8 2019-07-05 07:17:40 2019-07-05 07:19:12 92 80 18902 0 183
642 1562282380003 8 2019-07-05 07:19:40 2019-07-05 07:21:15 95 84 18902 0 182
643 1562282500002 8 2019-07-05 07:21:40 2019-07-05 07:23:15 95 84 18902 0 198
644 1562282620003 8 2019-07-05 07:23:40 2019-07-05 07:25:12 92 79 18902 0 208
645 1562282740002 8 2019-07-05 07:25:40 2019-07-05 07:27:09 89 77 18902 0 227
646 1562282860003 8 2019-07-05 07:27:40 2019-07-05 07:29:15 95 81 18902 0 249
647 1562282980003 8 2019-07-05 07:29:40 2019-07-05 07:31:17 97 83 18902 0 273
648 1562283100003 8 2019-07-05 07:31:40 2019-07-05 07:33:17 97 81 18902 0 287
649 1562283220002 8 2019-07-05 07:33:40 2019-07-05 07:35:14 94 77 18902 0 297
650 1562283340003 8 2019-07-05 07:35:40 2019-07-05 07:37:17 97 80 18902 0 311
651 1562283460002 8 2019-07-05 07:37:40 2019-07-05 07:39:22 102 84 18902 0 329
652 1562283580003 8 2019-07-05 07:39:40 2019-07-05 07:41:16 96 79 18902 0 319
653 1562283700002 8 2019-07-05 07:41:40 2019-07-05 07:43:17 97 80 18902 0 306
654 1562283820003 8 2019-07-05 07:43:40 2019-07-05 07:45:19 99 81 18902 0 348
655 1562283940002 8 2019-07-05 07:45:40 2019-07-05 07:47:19 99 80 18902 0 359
656 1562284060003 8 2019-07-05 07:47:40 2019-07-05 07:49:16 96 78 18902 0 363
657 1562284180002 8 2019-07-05 07:49:40 2019-07-05 07:51:17 97 79 18902 0 380
658 1562284300002 8 2019-07-05 07:51:40 2019-07-05 07:53:22 102 82 18902 0 381
659 1562284420003 8 2019-07-05 07:53:40 2019-07-05 07:55:20 100 80 18902 0 400
660 1562284540002 8 2019-07-05 07:55:40 2019-07-05 07:57:15 95 77 18902 0 383
661 1562284660002 8 2019-07-05 07:57:40 2019-07-05 07:59:19 99 80 18902 0 396
662 1562284780003 8 2019-07-05 07:59:40 2019-07-05 08:01:25 105 86 18902 0 378
663 1562284900002 8 2019-07-05 08:01:40 2019-07-05 08:03:23 103 82 18902 0 390
664 1562285020002 8 2019-07-05 08:03:40 2019-07-05 08:05:23 103 82 18902 0 385
665 1562285140002 8 2019-07-05 08:05:40 2019-07-05 08:07:22 102 82 18902 0 395
666 1562285260003 8 2019-07-05 08:07:40 2019-07-05 08:09:20 100 78 18902 0 415
667 1562285380002 8 2019-07-05 08:09:40 2019-07-05 08:11:21 101 80 18902 0 411
668 1562285500002 8 2019-07-05 08:11:40 2019-07-05 08:13:24 104 84 18902 0 398
669 1562285620003 8 2019-07-05 08:13:40 2019-07-05 08:15:24 104 83 18902 0 390
670 1562285740002 8 2019-07-05 08:15:40 2019-07-05 08:17:24 104 82 18901 1 396
671 1562285860003 8 2019-07-05 08:17:40 2019-07-05 08:19:25 105 82 18902 0 393
672 1562285980002 8 2019-07-05 08:19:40 2019-07-05 08:21:23 103 78 18902 0 440
673 1562286100002 8 2019-07-05 08:21:40 2019-07-05 08:23:29 109 87 18902 0 426
674 1562286220002 8 2019-07-05 08:23:40 2019-07-05 08:25:29 109 87 18902 0 425
675 1562286340002 8 2019-07-05 08:25:40 2019-07-05 08:27:28 108 87 18902 0 419
676 1562286460003 8 2019-07-05 08:27:40 2019-07-05 08:29:27 107 83 18902 0 412
677 1562286580003 8 2019-07-05 08:29:40 2019-07-05 08:31:22 102 81 18902 0 410
678 1562286700003 8 2019-07-05 08:31:40 2019-07-05 08:33:20 100 79 18902 0 406
679 1562286820003 8 2019-07-05 08:33:40 2019-07-05 08:35:34 114 90 18900 2 410
680 1562286940003 8 2019-07-05 08:35:40 2019-07-05 08:37:24 104 82 18902 0 370
681 1562287060003 8 2019-07-05 08:37:40 2019-07-05 08:39:24 104 83 18902 0 369
682 1562287180002 8 2019-07-05 08:39:40 2019-07-05 08:41:28 108 88 18902 0 386
683 1562287300003 8 2019-07-05 08:41:40 2019-07-05 08:43:27 107 88 18902 0 368
684 1562287420002 8 2019-07-05 08:43:40 2019-07-05 08:45:25 105 86 18902 0 376
685 1562287540002 8 2019-07-05 08:45:40 2019-07-05 08:47:24 104 84 18902 0 379
686 1562287660003 8 2019-07-05 08:47:40 2019-07-05 08:49:22 102 82 18902 0 363
687 1562287780003 8 2019-07-05 08:49:40 2019-07-05 08:51:26 106 85 18902 0 365
688 1562287900003 8 2019-07-05 08:51:40 2019-07-05 08:53:23 103 84 18902 0 377
689 1562288020002 8 2019-07-05 08:53:40 2019-07-05 08:55:21 101 82 18902 0 367
690 1562288140003 8 2019-07-05 08:55:40 2019-07-05 08:57:20 100 82 18902 0 351
691 1562288260003 8 2019-07-05 08:57:40 2019-07-05 08:59:21 101 82 18902 0 321
692 1562288380003 8 2019-07-05 08:59:40 2019-07-05 09:01:18 98 81 18902 0 330
693 1562288500002 8 2019-07-05 09:01:40 2019-07-05 09:03:18 98 82 18902 0 309
694 1562288620003 8 2019-07-05 09:03:40 2019-07-05 09:05:22 102 85 18902 0 310
695 1562288740003 8 2019-07-05 09:05:40 2019-07-05 09:07:19 99 83 18902 0 309
696 1562288860002 8 2019-07-05 09:07:40 2019-07-05 09:09:19 99 81 18902 0 326
697 1562288980003 8 2019-07-05 09:09:40 2019-07-05 09:11:13 93 77 18902 0 312
698 1562289100002 8 2019-07-05 09:11:40 2019-07-05 09:13:13 93 78 18902 0 299
699 1562289220003 8 2019-07-05 09:13:40 2019-07-05 09:15:20 100 84 18902 0 298
700 1562289340003 8 2019-07-05 09:15:40 2019-07-05 09:17:44 124 107 18900 2 262
701 1562289480003 8 2019-07-05 09:18:00 2019-07-05 09:21:22 202 172 18900 2 311
702 1562289700003 8 2019-07-05 09:21:40 2019-07-05 09:23:38 118 102 18902 0 321
703 1562289820003 8 2019-07-05 09:23:40 2019-07-05 09:26:13 153 124 18900 2 326
704 1562290000003 8 2019-07-05 09:26:40 2019-07-05 09:29:12 152 129 18902 0 333
705 1562290180003 8 2019-07-05 09:29:40 2019-07-05 09:32:59 199 178 18900 2 322
706 1562290380003 8 2019-07-05 09:33:00 2019-07-05 09:36:27 207 162 18897 5 315
707 1562290600003 8 2019-07-05 09:36:40 2019-07-05 09:41:17 277 238 18896 6 306
708 1562290900002 8 2019-07-05 09:41:40 2019-07-05 09:45:31 231 201 18899 3 336
709 1562291140003 8 2019-07-05 09:45:40 2019-07-05 09:47:49 129 111 18902 0 341
710 1562291280002 8 2019-07-05 09:48:00 2019-07-05 09:49:40 100 83 18902 0 325
711 1562291400002 8 2019-07-05 09:50:00 2019-07-05 09:51:38 98 81 18902 0 314
712 1562291500002 8 2019-07-05 09:51:40 2019-07-05 09:53:19 99 83 18902 0 297
713 1562291620002 8 2019-07-05 09:53:40 2019-07-05 09:55:22 102 85 18902 0 317
714 1562291740003 8 2019-07-05 09:55:40 2019-07-05 09:57:26 106 89 18901 1 293
715 1562291860003 8 2019-07-05 09:57:40 2019-07-05 09:59:27 107 91 18902 0 313
716 1562291980002 8 2019-07-05 09:59:40 2019-07-05 10:01:25 105 88 18902 0 319
717 1562292100003 8 2019-07-05 10:01:40 2019-07-05 10:03:22 102 84 18901 1 297
718 1562292220002 8 2019-07-05 10:03:40 2019-07-05 10:05:25 105 87 18900 2 290
719 1562292340002 8 2019-07-05 10:05:40 2019-07-05 10:07:16 96 81 18902 0 292
720 1562292460002 8 2019-07-05 10:07:40 2019-07-05 10:09:23 103 88 18902 0 270
721 1562292580003 8 2019-07-05 10:09:40 2019-07-05 10:11:29 109 93 18902 0 288
722 1562292700003 8 2019-07-05 10:11:40 2019-07-05 10:13:24 104 87 18901 1 289
723 1562292820003 8 2019-07-05 10:13:40 2019-07-05 10:15:32 112 94 18899 3 299
724 1562292940002 8 2019-07-05 10:15:40 2019-07-05 10:17:16 96 79 18902 0 287
725 1562293060002 8 2019-07-05 10:17:40 2019-07-05 10:19:17 97 82 18902 0 301
726 1562293180002 8 2019-07-05 10:19:40 2019-07-05 10:21:48 128 101 18901 1 283
727 1562293320002 8 2019-07-05 10:22:00 2019-07-05 10:23:46 106 90 18902 0 314
728 1562293440003 8 2019-07-05 10:24:00 2019-07-05 10:25:43 103 87 18902 0 299
729 1562293560003 8 2019-07-05 10:26:00 2019-07-05 10:27:38 98 82 18902 0 301
730 1562293660003 8 2019-07-05 10:27:40 2019-07-05 10:29:24 104 87 18902 0 295
731 1562293780002 8 2019-07-05 10:29:40 2019-07-05 10:31:21 101 85 18902 0 269
732 1562293900003 8 2019-07-05 10:31:40 2019-07-05 10:33:21 101 87 18902 0 266
733 1562294020002 8 2019-07-05 10:33:40 2019-07-05 10:35:17 97 81 18902 0 267
734 1562294140002 8 2019-07-05 10:35:40 2019-07-05 10:37:15 95 82 18902 0 254
735 1562294260002 8 2019-07-05 10:37:40 2019-07-05 10:39:20 100 87 18902 0 235
736 1562294380003 8 2019-07-05 10:39:40 2019-07-05 10:41:18 98 82 18902 0 252
737 1562294500003 8 2019-07-05 10:41:40 2019-07-05 10:43:23 103 87 18902 0 265
738 1562294620002 8 2019-07-05 10:43:40 2019-07-05 10:45:30 110 94 18902 0 274
739 1562294740002 8 2019-07-05 10:45:40 2019-07-05 10:47:23 103 87 18902 0 260
740 1562294860003 8 2019-07-05 10:47:40 2019-07-05 10:49:22 102 85 18902 0 271
741 1562294980002 8 2019-07-05 10:49:40 2019-07-05 10:51:25 105 90 18902 0 268
742 1562295100002 8 2019-07-05 10:51:40 2019-07-05 10:53:23 103 88 18902 0 286
743 1562295220003 8 2019-07-05 10:53:40 2019-07-05 10:55:25 105 88 18902 0 258
744 1562295340003 8 2019-07-05 10:55:40 2019-07-05 10:57:54 134 117 18901 1 252
745 1562295480002 8 2019-07-05 10:58:00 2019-07-05 10:59:55 115 98 18902 0 266
746 1562295600002 8 2019-07-05 11:00:00 2019-07-05 11:01:44 104 87 18902 0 265
747 1562295720002 8 2019-07-05 11:02:00 2019-07-05 11:03:49 109 94 18902 0 267
748 1562295840003 8 2019-07-05 11:04:00 2019-07-05 11:05:45 105 86 18901 1 267
749 1562295960002 8 2019-07-05 11:06:00 2019-07-05 11:07:46 106 91 18902 0 251
750 1562296080002 8 2019-07-05 11:08:00 2019-07-05 11:09:41 101 85 18901 1 250
751 1562296200002 8 2019-07-05 11:10:00 2019-07-05 11:11:48 108 91 18901 1 264
752 1562296320003 8 2019-07-05 11:12:00 2019-07-05 11:13:41 101 86 18902 0 270
753 1562296440003 8 2019-07-05 11:14:00 2019-07-05 11:15:45 105 90 18902 0 272
754 1562296560003 8 2019-07-05 11:16:00 2019-07-05 11:17:42 102 88 18901 1 273
755 1562296680003 8 2019-07-05 11:18:00 2019-07-05 11:19:40 100 86 18902 0 279
756 1562296800002 8 2019-07-05 11:20:00 2019-07-05 11:21:44 104 91 18902 0 252
757 1562296920002 8 2019-07-05 11:22:00 2019-07-05 11:23:50 110 95 18902 0 265
758 1562297040003 8 2019-07-05 11:24:00 2019-07-05 11:25:40 100 86 18902 0 257
759 1562297160003 8 2019-07-05 11:26:00 2019-07-05 11:27:41 101 87 18902 0 265
760 1562297280002 8 2019-07-05 11:28:00 2019-07-05 11:29:47 107 93 18902 0 260
761 1562297400002 8 2019-07-05 11:30:00 2019-07-05 11:31:45 105 92 18902 0 235
762 1562297520002 8 2019-07-05 11:32:00 2019-07-05 11:33:38 98 87 18902 0 197
763 1562297620002 8 2019-07-05 11:33:40 2019-07-05 11:35:26 106 94 18902 0 209
764 1562297740002 8 2019-07-05 11:35:40 2019-07-05 11:37:21 101 88 18902 0 212
765 1562297860003 8 2019-07-05 11:37:40 2019-07-05 11:39:19 99 84 18902 0 224
766 1562297980003 8 2019-07-05 11:39:40 2019-07-05 11:41:13 93 80 18902 0 220
767 1562298100002 8 2019-07-05 11:41:40 2019-07-05 11:43:37 117 102 18901 1 215
768 1562298220003 8 2019-07-05 11:43:40 2019-07-05 11:45:27 107 95 18902 0 217
769 1562298340003 8 2019-07-05 11:45:40 2019-07-05 11:47:31 111 98 18902 0 209
770 1562298460002 8 2019-07-05 11:47:40 2019-07-05 11:49:21 101 89 18902 0 221
771 1562298580002 8 2019-07-05 11:49:40 2019-07-05 11:51:18 97 85 18902 0 231
772 1562298700002 8 2019-07-05 11:51:40 2019-07-05 11:53:23 103 92 18902 0 232
773 1562298820002 8 2019-07-05 11:53:40 2019-07-05 11:55:20 100 89 18902 0 220
774 1562298940003 8 2019-07-05 11:55:40 2019-07-05 11:57:24 104 90 18900 2 225
775 1562299060002 8 2019-07-05 11:57:40 2019-07-05 11:59:57 137 121 18899 3 233
776 1562299200005 8 2019-07-05 12:00:00 2019-07-05 12:01:41 101 85 18901 1 207
777 1562299320002 8 2019-07-05 12:02:00 2019-07-05 12:03:37 97 86 18902 0 203
778 1562299420003 8 2019-07-05 12:03:40 2019-07-05 12:05:18 98 88 18902 0 193
779 1562299540003 8 2019-07-05 12:05:40 2019-07-05 12:07:17 97 83 18902 0 197
780 1562299660003 8 2019-07-05 12:07:40 2019-07-05 12:09:10 90 77 18902 0 196
781 1562299780002 8 2019-07-05 12:09:40 2019-07-05 12:11:10 90 78 18902 0 211
782 1562299900002 8 2019-07-05 12:11:40 2019-07-05 12:13:19 99 86 18901 1 203
783 1562300020002 8 2019-07-05 12:13:40 2019-07-05 12:15:17 97 86 18902 0 190
784 1562300140002 8 2019-07-05 12:15:40 2019-07-05 12:17:18 98 87 18902 0 187
785 1562300260003 8 2019-07-05 12:17:40 2019-07-05 12:19:20 100 89 18902 0 183
786 1562300380002 8 2019-07-05 12:19:40 2019-07-05 12:21:25 105 95 18902 0 183
787 1562300500010 8 2019-07-05 12:21:40 2019-07-05 12:23:19 99 87 18901 1 172
788 1562300620004 8 2019-07-05 12:23:40 2019-07-05 12:25:13 93 82 18902 0 184
789 1562300740004 8 2019-07-05 12:25:40 2019-07-05 12:27:20 100 89 18902 0 190
790 1562300860003 8 2019-07-05 12:27:40 2019-07-05 12:29:20 100 89 18902 0 171
791 1562300980004 8 2019-07-05 12:29:40 2019-07-05 12:31:25 105 94 18902 0 169
792 1562301100003 8 2019-07-05 12:31:40 2019-07-05 12:33:19 99 88 18902 0 182
793 1562301220004 8 2019-07-05 12:33:40 2019-07-05 12:35:16 96 86 18902 0 172
794 1562301340003 8 2019-07-05 12:35:40 2019-07-05 12:37:21 101 89 18902 0 164
795 1562301460004 8 2019-07-05 12:37:40 2019-07-05 12:39:17 97 85 18902 0 158
796 1562301580003 8 2019-07-05 12:39:40 2019-07-05 12:41:25 105 93 18902 0 184
797 1562301700005 8 2019-07-05 12:41:40 2019-07-05 12:43:19 99 88 18902 0 173
798 1562301820004 8 2019-07-05 12:43:40 2019-07-05 12:45:14 94 84 18902 0 155
799 1562301940004 8 2019-07-05 12:45:40 2019-07-05 12:47:20 100 88 18902 0 158
800 1562302060004 8 2019-07-05 12:47:40 2019-07-05 12:49:18 98 88 18902 0 146
801 1562302180003 8 2019-07-05 12:49:40 2019-07-05 12:51:26 106 93 18902 0 165
802 1562302300003 8 2019-07-05 12:51:40 2019-07-05 12:53:23 103 92 18902 0 172
803 1562302420004 8 2019-07-05 12:53:40 2019-07-05 12:55:29 109 96 18902 0 183
804 1562302540005 8 2019-07-05 12:55:40 2019-07-05 12:57:26 106 95 18902 0 140
805 1562302660004 8 2019-07-05 12:57:40 2019-07-05 12:59:20 100 89 18902 0 143
806 1562302780004 8 2019-07-05 12:59:40 2019-07-05 13:01:21 101 89 18902 0 145
807 1562302900004 8 2019-07-05 13:01:40 2019-07-05 13:03:25 105 94 18902 0 155
808 1562303020005 8 2019-07-05 13:03:40 2019-07-05 13:05:18 98 86 18902 0 164
809 1562303140004 8 2019-07-05 13:05:40 2019-07-05 13:07:19 99 89 18902 0 176
810 1562303260007 8 2019-07-05 13:07:40 2019-07-05 13:09:22 102 91 18902 0 153
811 1562303380006 8 2019-07-05 13:09:40 2019-07-05 13:11:21 101 91 18902 0 166
812 1562303500005 8 2019-07-05 13:11:40 2019-07-05 13:13:18 98 85 18901 1 151

完整数据

完整数据可通过连接数据库查看:

DBType: MariaDB
schemas: traffic-service-v2
host: 192.168.10.224
port: 3306
username: root
password: 123456

数据分析

通过以上数据,我们可以做个简单汇总分析:

  1. 一个分析周期内网络请求所消耗的时间占用了总消耗时间的 4/5, 这里说的网络请求时间指的是请求百度瓦片所消耗的时间
  2. 一个分析周期内: 总消耗时间的平均值为: 98.7 s, 网络请求所消耗的平均时间为: 85.7 s, 服务处理所消耗的平均时间为 13 s ;至于时间为什么会呈这样的分布,下面会有详细的解释
  3. 7 月 4 日的晚高峰拥堵时间开始与 17:09 左右, 于 19:33 左右结束, 并且在 17:58 至 18:00 达到了最高峰; 在最高峰时间服务分析耗时 31 s, 处理了 613 张拥堵瓦片.同理,还可以对 7 月 5 日进行同样的分析,这里不再列举
  4. 单张瓦片平均处理时间为 : 0.06976290 s
  5. 每个分析周期都会请求 18902 次瓦片,为什么有的周期请求时间断,而有的周期请求时间长?
    原因有 2 :
    1. 请求过程中可能会发生阻塞的情况,虽然这种情况较少,但是会拖慢单个线程的处理速度
    2. 每次分析的拥堵状况不同, 涉及拥堵的瓦片被填充的有效像素点的数量也不同,这就导致每次同一编号瓦片,但是大小不同,消耗的时间也就不同

机器表现

经过一周的服务性能测试,机器的表现如下

  1. CPU

CPU-OVERVIEW

这是一个分析周期的资源占用情况, 一个分析周期指的是分析完一遍合肥市拥堵情况的动作
截取其中几分钟的的监控情况如下:

CPU

简单解释:
第二张图中每个驼峰代表一次分析过程,图中 11:06 - 11:13,经过了 4 个分析周期,每个分析周期的的大致状态是前期和后期 CPU 占用率都不高,中间部分 CPU 占有率高, 约 80% 左右
这是因为在抓取地图瓦片的时候是按 从北向南 , 从西向东 的顺序来抓取的
很显然合肥市市内是较整个合肥市拥堵情况较重的,而市内是则位于整片区域的中心部分
于是就能解释为什么在一个分析周期前期和后期 CPU 占用率都不高,中间部分 CPU 占有率高的原因

  1. 线程
    Thread

简单解释:
重点看 ts_ 前缀开头的线程
这 8 条线代表分析服务的 8 个线程,绿色代表正在运行, 黄色代表在等待中
中间被隔开代表分析服务已经进行了一个周期
可以看出单个线程在执行一个分析周期的时候,有至少三分之一的时间是处于等待的
这是因为服务分析速度很快,分析完毕之后就从队列中拿出下一条任务出来分析,而在分析之前,会先进行网络请求
请求瓦片是 TCP 请求, 经历上一次请求关闭的四次挥手和连接建立的三次握手, 这种 IO 请求的耗时对 CPU 来说简直如隔三秋
( 对于一次分析周期,去除无道路信息的瓦片,有 18902 张瓦片, 这些都是几十 KB 到几百 KB 大小不等的图片, 需要进行 18902 次 IO 请求,其开销必然不小 )
但是 CPU 不会闲着,他会去处理其他线程的请求
这样的分析也能够解释了上述表格中 总耗时网络请求耗时 之间的关系

线程中甚至还会出现这样的情况

Thread Waiting

这种情况会拖慢单个线程的执行效率
这种情况是因为在请求百度瓦片的时候某一张耗时过长被阻塞了,导致线程一直在等待,直到等待时间大于等于连接超时时间或者数据传输超时时间,该线程会被主动释放,后面又恢复正常运行
不过这种情况出现的次数比较少,主要看网络的稳定性,有出现的情况都在日志里记录下来了,即上述表格中的出错数

  1. 内存
    Memory

对于服务器内存来说, 24G 内存还是比较吃紧的
其中最消耗服务器内存是核心分析服务, 为 java 服务
java 12 初始化堆大小和最大堆大小均没有配置,为缺省值
这时最大堆大小 Xmx 为物理内存的 1/4 , 即 6 GB

通过上面的图可以得出:
核心分析服务达到峰值时, 以达到最大内存 6G, 后来内存占用又会减少,很有可能是 6G 内存不够使用,已触发 GC, 导致内存释放
结合整个机器内存占用普遍在 80% 以上, 更能说明这一点

  1. 磁盘
    Disk

磁盘的 IO 情况其实并没有太大变动,只是在分析的高峰会有写入和读取

  1. 网络
    Networks

8 线程并发请求, 外网下载速度平稳在 350 kb/s 左右, 对网络带宽大小要求不高,但要求网络稳定,无抖动,无丢包

性能优化

经过上面的分析,我认为可以从下面几个点再继续优化:

  1. 提示机器内存: 显然测试机器的内存有点吃紧, 至少 64 G 为合适
  2. CPU 的频率不需要太高,可选择核数多 CPU, 因为整个耗时最长的是网络请求时间, 而这种 IO 并不消耗 CPU 时间,可将线程数调节至 CPU 逻辑核心数的 3 倍到 5 倍. 推荐 IntelXeon E5 系列 CPU
  3. 提供更稳定的网络
  4. 既然请求百度的瓦片耗时高,那么先缓存一部分瓦片到本地进行分析,效率是否更高? (下面进行测试) 不过带来的坏处就是丧失了分析服务的实时性

本地缓存分析

我事先缓存了 2019年07月04日17:00:00 到 2019年07月04日18:00:00, 60 分钟内每分钟的瓦片数据, 共计 18902 * 60 = 1134120 张瓦片到本地磁盘

Nginx 读取

将这 110w 张瓦片放到 nginx 目录下, 在进行测试
发现测试结果并不能够令人满意,和上面的结果几乎无差,这里就不再贴出表格数据了
仔细分析结果是没错的.还是同样的 TCP 请求,只不过不同的是从远端服务器变成了本地服务器

本地读取瓦片

将 TCP 请求更换为本地读取文件形式,结果分析时间令人欣慰, 这里也不贴出表格数据了,放一张日志的截图对比下

File System

总结

  1. 本分析服务对服务器的要求并不高, 要求 CPU 尽量多核心,网络稳定
  2. 开销时间主要集中在网络请求耗时, 目前较好的解决方式是先本地缓存再分析,牺牲了分析的实时性

背景

用 gradle 构建经常失败,主要是国内网络的原因,这时候配置 gradle 使用代理,构建过程要轻松许多

做法

  1. JVM system properties
    例如:
    System.setProperty(‘http.proxyHost’, ‘www.somehost.org‘)

  2. 配置 gradle.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
## http
systemProp.http.proxyHost=www.somehost.org
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=userid
systemProp.http.proxyPassword=password
systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost

## https
systemProp.https.proxyHost=www.somehost.org
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=userid
systemProp.https.proxyPassword=password
systemProp.https.nonProxyHosts=*.nonproxyrepos.com|localhost

背景

docker 仓库存储大量的镜像,占用的空间很大,放到群晖上存储再合适不过了
之前写过基于 docker compose 使用 Harbor 搭建 Docker 私有仓库并管理,但是群晖里只有 docker 的管理,没有 docker compose 的直接支持
现在来个简单的仓库管理

方法

  1. 安装 docker 套件
  2. 下载 registry 和 joxit/docker-registry-ui 镜像
  3. 分别启动这 2 个容器,注意配置

registry 配置

  1. 配置挂载目录
  2. 配置环境变量,因为默认的 registry 镜像不支持跨域请求和没有开启删除镜像的功能,我曾尝试在镜像里修改配置文件,然后在导出镜像,但是失败了,新导出的镜像启动后无法提供服务
  3. 环境配置如下

Synology-Private-Docker

REGISTRY_STORAGE_DELETE_ENABLED:true
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Headers:[‘Origin,Accept,Content-Type,Authorization’]
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods:[‘GET,POST,PUT,DELETE’,’HEAD’]
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin:[‘*’]
REGISTRY_HTTP_HEADERS_Access-Control-Expose-Headers:[‘Docker-Content-Digest’]

后续配置

路由器开启端口映射即可

镜像的删除

首先要说的是,这里有个坑, 官方提供的删除镜像仓库中镜像的接口,仅仅是把 manifest 删除了,真正的镜像文件还存在!官方并没有提供删除镜像层的接口!这也就是说,当我们调用删除镜像的接口之后,仅仅是查看镜像的列表时看不到原镜像了,然而原有镜像仍然在磁盘中,占用着宝贵的文件存储空间

这里使用官方提供的 GC 工具来清除无用文件

删除方式 1

  1. 在 web 界面上删除,或者调用 api 删除:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
获取待删镜像的digest

获取镜像digest的API为:

GET /v2/<tag>/manifests/<version>

例如: /v2/joy/blog.joylau.cn/manifests/1.0

其中,name是仓库名,reference是标签,此时需要注意,调用时需要加上header内容:

Accept: application/vnd.docker.distribution.manifest.v2+json

其中Docker-Content-Digest的值就是镜像的digest

3、调用官方的HTTP API V2删除镜像

删除镜像的API为:

DELETE /v2/<name>/manifests/<sha256>

例如: /v2/joy/blog.joylau.cn/manifests/sha256:6c2daa1642b94dabdfaa32a9d3943cb92036c55117961fa9fcc4cc29348e5d39


其中,name是仓库名称,reference是包含“sha256:”的digest。
  1. 进入容器里调用GC清理镜像文件
1
bin/registry garbage-collect /etc/docker/registry/config.yml

注意: gc不是事务操作,当gc过程中刚好有push操作时,则可能会误删数据,建议设置read-only模式之后再进行gc,然后再改回来

  1. 重启 docker registry
    注意,如果不重启会导致push相同镜像时产生layer already exists错误。

删除方式 2

使用第三方开源工具: https://github.com/burnettk/delete-docker-registry-image

该工具也提供了dry-run的方式,只输出待删除的信息不执行删除操作。在命令后加上——dry-run即可

跟gc方式一样,删除镜像之后要重启docker registry,不然还是会出现相同镜像push不成功的问题。

docker-registry-ui 对于有认证的 docker 私服的配置 [2020-04-09 更新]

对于没有认证的 docker 私服,使用方式上面已经有配置了
对于有认证的 docker 私服,却有点变化
需要改变:

REGISTRY_HTTP_HEADERS_Access-Control-Allow-Methods:[‘GET,POST,PUT,DELETE’,’HEAD’]
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Origin:[‘‘]
REGISTRY_HTTP_HEADERS_Access-Control-Allow-Credentials: [true]

另外,对于有认证的 docker 私服,删除镜像还有有问题的:
具体情况见: https://github.com/Joxit/docker-registry-ui/issues/104

简单来说是 docker 私服的锅,并不是 Joxit/docker-registry-ui 的问题,因为在浏览器再监测是否允许跨域请求发出的 options 请求被返回了 401 状态,导致后续请求无法发出

而实际上应该返回 20x 的请求

作者给出方法是: 将 docker 私服和 docker-registry-ui 放到同一个域下

那我这边还是以 群晖的 docker 来配置 nginx 来实现这样的功能

nginx 配置如下:

  1. /etc/nginx/nginx.conf, 这个没有变化,我们将其外置,方便日后修改:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
user  nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
worker_connections 1024;
}


http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

include /etc/nginx/conf.d/*.conf;
}
  1. /etc/nginx/conf.d/default.conf: 这个文件我们添加反向代理,使得 docker 私服和 docker-registry-ui 在同一个域下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
server {
listen 80;
server_name localhost;

#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

#location / {
# #rewrite ^/b/(.*)$ /$1 break;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_pass http://nas.joylau.cn:5007/; # 转发地址,注意要有/
#}

location /v2 {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://xxxx:xxx/v2; # 转发地址
}

location /ui {
rewrite ^/b/(.*)$ /$1 break; # 去除本地接口/ui前缀, 否则会出现404
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://xxxx:xxx/; # 转发地址,注意要有/
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

访问方式:

  1. docker-registry-ui 的访问直接使用 nginx 的地址, 后面加上 /ui/, 这样就会代理到之前的 docker-registry-ui 的服务
  2. docker registry 的地址直接填 nginx 提供服务的主机 + 端口号即可, 后面不需要加其他东西

这样方式在 docker-registry-ui 连接 docker 私服时会弹框输入用户名密码, 也能完美解决删除镜像的问题

Docker 私服配置 SSL 证书

  1. 去证书申请网站上下载证书, 我的是阿里云的, 下载下来的压缩包里有 2 个文件 .key 和 .pem
  2. 将这 2 个文件上传到 NAS 上, 配置 registry 挂载这 2 个文件, 并配置如下 2 个环境变量, 重启 registry 容器即可
1
2
-e REGISTRY_HTTP_TLS_CERTIFICATE=/server.crt
-e REGISTRY_HTTP_TLS_KEY=/server.key

REGISTRY_HTTP_TLS_CERTIFICATE 这个变量指定的文件可以在挂载的时候将 .pem 直接更名为 .crt 文件

背景

基于 iKuai 软路由系统的单线多拨和多线多拨
家里一条电信 50M 带宽(上行 10M)
一条 100M 的长城宽带(上行 100M, 下行实际外网带宽 10M)
谁不想带宽叠加,网速更快呢

单线多拨

方法

  1. 选择基于物理网卡的混合模式
  2. 勾选开启多拨,并输入个数,我这里是 4, 也就是 4 拨,这个数字是我在电信的网站上,进入我的业务,套餐里看到的,允许 4 个终端拨号上网
  3. 依次在底下列表里添加 4 个拨号项,都是相同的账号和密码
  4. 在多线负载配置中,添加一条规则: 源 IP + 目的 IP + 目的端口,运营商选全部,负载比例 1:1:1:1
  5. 打开 speedtest.cn 进行测速,在线路监控里看到 4 条线路中每一条线路都有流量流过

总结

单线多拨成功, 但是总带宽不叠加,4 条线路的总带宽还是 50M,应该是运营商做了端口限制,暂时无解

多线多拨

方法

  1. 2条带宽均选择 ADSL/PPPoE 拨号,并正常拨号成功上网
  2. 网络设置 > DNS设置 > DNS设置中首选DNS配置成 192.168.1.1, 并开启 DNS加速服务, DNS加速模式选择代理模式,勾选强制客户端DNS代理
  3. 在多线负载配置中,添加一条规则: 源 IP + 目的 IP + 目的端口,运营商选全部,负载比例 1:1:1:1
  4. 打开 speedtest.cn 进行测速,在线路监控里看到 2 条线路中都有流量流过,并且都能达到峰值

总结

多线多拨并宽带叠加成功,但是部分网页会打不开,游戏也会掉线,因为目的地址有 2 个,这是需要配合其他的策略进行负载均衡,具体配置根据实际情况来添加

0%