httpclient

spring RestTemplate 出现 NoHttpResponseException 和 ConnectionTimeoutException

纵饮孤独 提交于 2020-12-29 11:22:39
使用 httpclient.4.5.6 springboot 2.0.8RELEASE RetryExec.java CloseableHttpResponse execute() try { return this.requestExecutor.execute(route, request, context, execAware); } catch(final IOException ex) { if (retryHandler.retryRequest(ex.execCount, context) { } else { if (ex instanceof NoHttpResponseException) { } } } @Configuration public class RestTemplateConfig { // builder.build();的并发量是5,不如 new RestTemplate() 默认200 @Bean public RestTemplate restTemplate(RestTemplateBuilder builder) { return builder.build(); } } 这样建的RestTemplate 没有重发 NoHttpResponseException和org.apache.http.conn

记一次NoHttpResponseException问题排查

不打扰是莪最后的温柔 提交于 2020-12-29 10:35:58
上传文件程序会有一定的概率提示错误,错误率大概在1%以下,错误信息是: org.apache.http.NoHttpResponseException , s3-us-west-1.amazonaws.com:80 failed to respond ,看着是上传到S3的过程中发送了网络错误? 通过查阅资料,发现了一篇比较好的文章: 一次NoHttpResponseException问题分析解决 。这个文章的观点是会发生这个错误的原因是服务端关闭了连接,而客户端还在使用该连接,导致服务端响应RST报文,客户端收到RST报NoHttpResponseException异常。 为了说明这个场景,就要提一下Keepalive机制。Keepalive是HTTP的连接复用机制,在HTTP1.0时代,每个请求经过三次握手后,只会传输一次HTTP请求和响应报文后,就进入四次挥手关闭连接了。而TCP建立连接和关闭连接的代价是比较大的,导致HTTP1.0的通道利用率较低,时延较高。针对这个问题,退出了Keepalive机制,一个TCP连接建立后,可以在上面发送多个HTTP报文,只有这个TCP连接的空闲时间达到超时时间,才会被关闭。HTTP1.1默认开启Keepalive。这里的关闭行为可能发生在客户端和服务端,比如客户端的Keepalive超时时间更短,则客户端就会先关闭连接

WebMagic

只谈情不闲聊 提交于 2020-12-29 06:51:55
WebMagic 是干嘛的? WebMagic 是一个 Java 平台上的开源爬虫框架,其设计参考了 Scrapy,实现则参考了 HttpClient 和 Jsoup。其由四大组件组成: Downloader,负责下载网页,使用 HttpClient。 PageProcessor,负责解析网页和链接发现,使用 Jsoup 和 Xsoup。 Scheduler,负责管理待抓取的 URL 和去重。 Pipeline,负责结果数据的持久化。 快速开始 (1)依赖引入 ext { versions = [ "web_magic": '0.7.3' ] } dependencies { // 这里有自己项目的日志实现 compile project(':base') compile("us.codecraft:webmagic-core:${versions.web_magic}") { exclude group: 'org.slf4j', module: 'slf4j-log4j12' // 移除默认的日志实现 } compile("us.codecraft:webmagic-extension:${versions.web_magic}") { exclude group: 'org.slf4j', module: 'slf4j-log4j12' } } (2)快速开始 爬取

Apache HttpClient 4.5: Connection Resets

删除回忆录丶 提交于 2020-12-29 06:43:51
问题 I am using httpClient version 4.5 to connect with our external vendor site. We do not need any connection pool or persistent connection, so I am using the BasicHttpClientConnectionManager to create the HttpClient. This works fine for minimal number of requests, but if I test this for 1TPS for 1 hour, by the end of the test, we start seeing intermittent connection resets. (guessing request count > 100) I/O exception (java.net.SocketException) caught when processing request to {s}->https:/

Apache HttpClient 4.5: Connection Resets

夙愿已清 提交于 2020-12-29 06:41:54
问题 I am using httpClient version 4.5 to connect with our external vendor site. We do not need any connection pool or persistent connection, so I am using the BasicHttpClientConnectionManager to create the HttpClient. This works fine for minimal number of requests, but if I test this for 1TPS for 1 hour, by the end of the test, we start seeing intermittent connection resets. (guessing request count > 100) I/O exception (java.net.SocketException) caught when processing request to {s}->https:/

Apache HttpClient 4.5: Connection Resets

拥有回忆 提交于 2020-12-29 06:41:39
问题 I am using httpClient version 4.5 to connect with our external vendor site. We do not need any connection pool or persistent connection, so I am using the BasicHttpClientConnectionManager to create the HttpClient. This works fine for minimal number of requests, but if I test this for 1TPS for 1 hour, by the end of the test, we start seeing intermittent connection resets. (guessing request count > 100) I/O exception (java.net.SocketException) caught when processing request to {s}->https:/

记一次 TCP 全队列溢出问题排查过程

半腔热情 提交于 2020-12-28 16:01:35
1. 前言 本文排查的问题是经典的TCP队列溢出问题,因TCP队列问题在操作系统层面没有明显的指标异常,容易被忽略,故把排查过程分享给大家。 2. 问题描述 A服务调用B服务接口超时,B服务主机IOWAIT高,具体超时情况分为两种: A服务的请求在B服务日志中可查到,但B服务的响应时间超过了A服务的等待超时时间3S。 A服务的请求在B服务日志中无法查到。 3. 问题分析 此种超时请求集中在很短的一段时间(通常在2分钟之内),过后便恢复正常,所以很难抓到问题现场分析原因,只能搭建测试环境,A服务持续请求B服务,在B服务主机上通过DD命令写入大量数据造成主机IOWAIT高,同时通过TCPDUMP在两端抓包分析。 部分服务超时日志: 服务A:Get http:// xxx &id=593930: net/http: request canceled (Client.Timeout exceeded while awaiting headers) 服务B: "GET xxx&id=593930 HTTP/1.1" 200 64 "-" "Go-http-client/1.1" "-" "-" 165000(单位微秒) 服务A发起请求3S后没有收到服务B响应,断开连接,服务B日志显示处理时长为0.165S,远低于3S,服务A侧看服务B的响应时间为网络传输时间

1、Nginx安装

不羁岁月 提交于 2020-12-26 05:41:59
1、上传Nginx包到linux系统,版本nginx-1.16.1 2、安装Nginx依赖 1) yum install gcc-c++ 2) yum install -y pcre pcre-devel 3) yum install -y zlib zlib-devel 4) yum install -y openssl openssl-devel 3、解压 4、创建nginx临时目录,如果不创建,启动nginx时会报错 mkdir /var/temp/nginx -p 5、在nginx目录,输入如下命令进行配置,目的是为了创建Makefile文件 ./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/locl/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy -

前端小技巧之debug与测试网络请求负载

谁都会走 提交于 2020-12-24 15:04:49
需求:更改前端的某个ajax网络请求的负载(payload)并测试保证功能正常 假如此次的修改改动较大,或者原本的构建 payload 的逻辑比较复杂,我们可能需要反复地修改和测试。 如果这个 ajax request发送后对后端资源造成的影响很小的话 —— 比如 创建一本书籍记录,更新一篇文章的标签,其实我们也不需要考虑太多,直接 一边修改一边测试 就可以了。 因为这些不痛不痒的资源即使在测试过程中被创建或者修改了,测试结束后也可以轻松地删掉,不会造成大影响。 但是,假如这个ajax request 在后端会 触发比较重的操作 —— 比如创建某个服务集群,重新部署某个服务节点,我们就得谨慎考虑了。 这类比较重的操作一方面会花费比较长的时间,另一方面会真实地修改或消耗线上资源,随意且频繁地测试并不合适。 这种情形要求我们 除了最后的一两次验收,其余的测试都不该真的发请求到后端. 那应该怎么做呢? 方案一:修改并注释请求发送的代码 假如以下是原本的代码 getFormData = ()=> { // construct the payload from form data } onSubmit = () => { const payload = getFormData(); httpClient.postRequest(payload); }; 测试时期的代码 getFormData

Java自动化测试(自动化测试背景与流程 27)

隐身守侯 提交于 2020-12-24 03:54:46
自动化测试背景 什么是自动化测试 机器代替手工测试,自动验证结果是否符合预期 自动化测试优点 替代大量重复手工测试 提升回归测试效率,适合敏捷开发 在非工作时间自动执行,工作时间查看测试报告 保证每次测试执行的一致性与正确性,避免人为错误 自动化测试劣势 一般用于回归测试,项目开发初期不适合使用自动化 不能全部取代手工测试,只能替代手工测试中机械化,重复度高的操作,自动化测试极少能够达到100%覆盖率 自动化测试非常脆弱,特别是UI自动化 自动化测试工作量(框架设计+脚本开发)比单次手工测试大很多,当自动化多次执行时,性价比才会凸显 自动化测试实施流程 1.评估自动化测试实施可行性 想要开展自动化测试,应该遵循以下几个前提条件: 需求稳定,不会频繁变更 研发和维护周期长,需要频繁执行回归测试 项目资源足够「人力」 2.测试需求分析 自动化测试到底要做到什么程度 自动化测试覆盖范围: 主业务流程 历史BUG较多的模块 基础重复的功能 优先级 3.制定测试计划 测试工具/框架选型 接口自动化:TestNG+HttpClient+Maven+Allure+Log4j web自动化:TestNG+Selenium 框架设计,自动化测试脚本开发时间计划表 脚本执行的策略,冒烟测试/回归测试的频率 定义自动化测试的输出,测试框架,测试脚本,测试数据,发现的缺陷,测试报告 测试数据生成 UI方法