HTTPCLIENT性能调优
httpclient的默认配置提供了最大的可靠性和标准的遵守,而不是性能。(哪个标准?难道是指HTTP协议规范?)有几个配置选项和优化技术,可以显着提高httpclient 的性能表现。 本文档给出了对httpclient如何调优的大纲。
1.重用HTTPCLIENT实例。
一般说来,建议一个通讯组件,甚至说一个应用软件就始终维持一个HttpClient对象实例存在。但是如果你的应用很稀罕才用到它,而且还不允许这么一个实例一直存在,那么,这里强烈建议,每次在disposing 它之前,一定要显式地shut down 它的 multithreaded connection manager 。这样做是确保连接池里的connection得到释放。
2.持续连接不关闭。
httpclient总是尽量重用连接。它不要求任何配置,默认情况下就是这样。某些情况下,这可能导致连接泄漏,而耗尽资源。禁用持续连接最简单的方法是提供或扩展一个connection manager,在releaseConnection被调用的时候,这个connection manager将把connection真正关闭掉。
3.http method的并发执行。(实际上是在对1.延伸)
如果应用程序逻辑允许并发执行多个HTTP请求,(例如对多个服务器的多个并发请求,或对同一个服务器代表不同用户身份的多个请求) ,应用程序可以为每一个HTTP session开启一个专门的线程,这样的设计自然将带来显著的性能提升。 而当使用一个线程安全的连接管理器,如multithreadedhttpconnectionmanager时,HttpClient能保证线程安全。这样,多个线程可以共享这么一个线程安全的HttpClient实例。请注意,应用程序的每个各自执行的线程必须使用各自的httpmethod实例;并且可配置各自的httpstate实例和/或hostconfiguration实例(代表一个特定的会话状态和主机配置)。这个共享的HttpClient和其标配的multithreadedhttpconnectionmanager将为各线程带来最高的性能。
4.request/response entity 流技术处理
HttpClient能够有效地流处理request,response。就是说大的entity可以不用在内存(泛滥)缓存就发送或接收。这点在多请求并发时尤其关键。虽然提供了方法可以通过访问字符串或字节组的方式处理数据(而不是通过流),但是不建议这样做。因为除非特别仔细,这样做很容易引起内存溢出,因为这些方法实际上是把整个entity都缓存在了内存中。
response流API:建议使用HttpMethod#getResponseBodyAsStream,将response体作为字节/字符流处理;不建议使用HttpMethod#getResponseBody 和HttpMethod#getResponseBodyAsString 。
request流API:对于request的流处理,技术难题在于如果通讯过程出现问题(认证失败或io失败),那么需要对发送的request entity进行重新获取,重新发送。很明显,(request的数据来源于应用程序的各个方面),除了可以提供API(NameValuePair 形式)处理可完全缓存在内存的数据(字节组等),不容易提供统一的API。因此(对于大块的entity),程序员可通过自行继承RequestEntity,在相应回调方法里进行流化处理。
5.Expect-continue handshake
HTTP提供HTTP 100 (Continue) 状态,是指客户端发送一个“预期HTTP100”的请求header,如果服务器响应100说明接受该客户端请求,则客户端继续发送body。是啊,如果服务器通过header就能判断是否响应100还是拒绝,那么不通过这条路就直接发送body(尤其是大body)真的太浪费资源了。授权拒绝是最典型的情形了。因此强烈建议对于那些有HTTP认证要求的服务器使用“预期HTTP100”这种通讯方式。注意如果通讯要通过代理,程序员要处理可能的警告,因为一些老的HTTP1.0代理服务器不能正确处理“预期HTTP100”通讯方式。
6. 钝态连接的检查
HTTP协议规范允许客户端或服务器端不知会对方,在任意时刻都可以终止一个连接(指底层网络连接),因此这个connection就变成了钝态或者说陈旧了,反正是不能用了。在默认情况下,HttpClient 会在执行HTTP方法前检查要用的连接,看看是否是钝态。这个检查需耗时15-30ms,根据使用的jre不同而不同。关闭这个检查能带来小部分的性能提升,尤其对于小负载response这种通讯。但是关闭后可能面临底层连接已关闭的异常(服务器主动关闭但没通知客户端)。
7.Cookie 处理
如果一个应用程序,例如web spider,不需要和服务器保持会话状态,则禁用cookie会带来轻微的性能提升。
分享到:
相关推荐
最后,我们可以配置HTTPClient Bean来提高客户端的性能。我们可以创建一个HTTPClient Bean,例如: ```java import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.TimeUnit; import ...
11. **性能调优**:优化HttpClient的性能包括减少连接时间、复用连接和正确关闭资源。理解`ConnectionKeepAliveStrategy`和`RedirectStrategy`的作用。 12. **错误处理**:学习如何捕获和处理HttpClient可能抛出的...
HttpClient 4.3的文档详细介绍了这些功能的使用方法和示例,包括错误处理、性能调优、高级特性的应用等。通过阅读这份文档,开发者可以深入理解HttpClient的工作原理,从而更好地在实际项目中运用它。 总之,...
HttpClient是Apache基金会开发的一个Java库,它为Java程序员提供了强大的HTTP客户端服务,使得与Web服务器...在实际使用时,结合具体的业务需求,对HttpClient进行适当的配置和调优,可以实现高效、安全的网络通信。
- **性能优化**:HttpClient支持多线程、连接池,以及各种性能调优选项。 在视频网站爬虫中,HttpClient通常负责发起HTTP请求,获取网页内容,然后传递给JSoup进行解析。 **3. 结合使用JSoup与HttpClient** 将...
8. **性能调优**:根据实际需求,可能需要调整HttpClient的配置,如最大连接数、超时时间、线程池大小等,以优化并发性能。 通过理解和熟练使用这些知识点,我们可以构建出高效且可靠的HTTP并发访问工具。这个Java...
9. **性能调优**:通过调整HttpClientConnectionManager的参数,如最大连接数、连接超时时间,可以优化HTTP请求的性能。在高并发场景下,适当增大连接池大小,可以处理更多的请求;而在低并发环境下,减少连接池大小...
HTTP客户端该项目是一个面向 Java 高性能和吞吐量的 HTTP 客户端库,支持 HTTP 1.1 流水线。 它主要针对服务器端使用而开发,其中速度和低资源使用是关键因素,但也可用于构建客户端应用程序。 建立在 Netty 之上,...
除了上述提到的技术和方法之外,对JVM进行调优也是提高Java程序性能的重要手段之一。JVM调优主要包括以下几个方面: - **垃圾回收调优**:合理设置堆大小、选择合适的垃圾回收器等。 - **线程池配置**:根据实际应用...
在进行性能调优时,可以关注连接管理,如连接复用、超时设置,以及内存使用情况,例如通过调整缓冲区大小和减少不必要的对象创建来优化资源消耗。 总之,Apache Http系列库是Java开发中不可或缺的工具,它们为HTTP...
在优化方面,Java的内存管理和性能调优技巧是提升应用体验的重要手段。了解垃圾回收机制,避免内存泄漏,合理使用内存池,以及优化UI绘制,都能显著改善应用性能。 除此之外,随着5G技术的发展,移动通信领域的Java...
10. **网络调试和性能调优**:使用网络工具如Wireshark进行网络包捕获和分析,以及使用JDK的JMX(Java Management Extensions)进行性能监控和优化。 本教程“Java网络编程从入门到精通”将详细讲解这些概念,并...
10. **性能调优**:如何进行代码优化,使用JProfiler或VisualVM等工具进行性能分析,以及如何进行系统调优。 11. **版本控制**:如Git的使用,分支管理、合并冲突解决等。 12. **项目经验与团队协作**:对于实际...
源码分析可以帮助我们了解如何进行内存泄漏检测,如何合理使用内存,以及如何利用Android性能分析工具进行性能调优。例如,使用WeakReference防止内存泄漏,使用LruCache进行内存缓存,以及避免不必要的对象创建等。...
同时,池的监控功能允许开发者通过监听器接口了解对象池的状态变化,便于调试和性能调优。 5. **与其他组件的集成** Apache Commons Pool 广泛应用于其他开源项目,如Apache Commons DBCP(数据库连接池)和Apache...
5. Android性能调优:从源码角度出发,学习如何优化应用程序的性能,包括内存管理、线程调度和渲染优化。 通过这些特刊的学习,开发者不仅可以提升Android开发的专业技能,还能掌握最新的技术趋势和最佳实践,从而...
10. 性能优化:分析JVM性能,使用JVisualVM、JProfiler等工具进行性能监控,理解CPU、内存、GC的指标,进行代码级别的性能调优。 11. 模块化与Java 9:介绍Java 9引入的模块系统,理解模块化的概念,以及如何使用...
书中会讲解线程池、异步编程(async/await)、并发策略和性能调优技巧。 9. **故障排查和调试**:网络问题的诊断通常较为复杂,书中会分享一些调试工具和方法,帮助开发者解决网络编程中遇到的问题。 10. **案例...
5. **JVM**(JVM.md):Java虚拟机是Java程序运行的基础,深入理解JVM内存模型(堆、栈、方法区等)、垃圾收集机制、性能调优策略(如内存参数调整)以及类加载机制对于优化应用性能非常重要。 6. **Mybatis框架**...
同时,性能调优也是关键,包括JVM参数调整、代码优化等。 通过阅读《分布式Java应用.基础与实践》这本书,读者将能够全面掌握分布式系统开发所需的知识,从理论到实践,从基础到高级,逐步提升自己的Java分布式应用...