当使用 Linux SSH 连接远程服务器时,可能会遇到一个问题:在一段时间内没有活动时,SSH 连接可能会自动断开。这对于那些需要长时间维护服务器或者执行耗时任务的用户来说可能是非常烦人的。在本文中,我们将探讨这个问题的原因以及如何解决它。
在以前文章里我们分别介绍了 httpclient 连接池的连接的申请,连接的释放,连接的重用,连接的 keep alive ,连接的可用性检查,空闲连接的清理,请求的 retry ,ssl 请求的支持,长连接的支持等。在这里我们主要总结连接池中的使用建议。
1,curl进程运行了一个api查询接口,curl的时候设置了超时时间 --connect-timeout 1000 2,operation timed out after 1000 milliseconds with 0 bytes received 3,connect() timed out!
长连接通过Socket与服务端建立持久的链接,即使单个请求发送与接收后也不会释放链接。这样的好处有:
在微服务架构盛行的年代,我们将一个大型的系统,拆解成各个服务,要完成一个业务逻辑,就可能需要,调用不同服务。比如订单服务调用会员服务。当然我们可以使用JDK自带的URLConnection,或者Apache的Http Client来调用,但是最为优雅的使用feign。
当你接手一个老项目,可能发现程序在服务器上运行性能低得可怕,与此同时现网流量还在逐渐增长。也许运用最新框架、微服务容器化、异步协程等方法来次彻底的重构,能够挽狂澜于既倒。可惜时不我待,运维已经在要求加机器了,而坏消息是,原有框架还不支持水平扩展,没法通过堆机器解决。有没有办法在不进行大改的情况下,度过难关呢?
在4月23日~25日举行的QCon全球软件开发大会(北京站)上,携程技术中心无线开发总监陈浩然分享了《移动开发网络性能优化实践》,总结了携程在App网络性能优化方面的一些实践经验。在2014年接手携程无线App的框架和基础研发工作之后,陈浩然面对的首要工作就是App客户端性能优化,尤其是网络服务性能,这是所有App优化工作的重中之重。以下为正文。 首先介绍一下携程App的网络服务架构。下图是携程App的架构设计(典型的层次化设计): 📷 由于携程业务众多,开发资源导致无法全部使用Native
在我们的日常工作中,使用 npm(Node Package Manager)来安装依赖是非常常见的。然而,有时候在执行 npm install 的过程中会遇到各种各样的报错,这可能会让人感到头疼。本文将介绍一些常见的 npm install 报错以及它们的解决方法,希望能帮助你更轻松地解决这些问题。
前言: 在13年11月中旬时,因为基础组件组人手紧张,Leo安排我和春哥去广州轮岗支援。刚到广州的时候,Ray让我和春哥对Line和WhatsApp的心跳机制进行分析。我和春哥抓包测试了差不多两个多礼拜,在我们基本上摸清了Line和WhatsApp的心跳机制后,Ray才告诉我们真正的任务——对微信的固定心跳进行优化,并告诉我们这不是一件容易的事情。 于是我和春哥开始构思第一个方案,我们开始想用统计的方法来解决问题,当我们拿着第一个方案和Ray讨论时,发现不能优雅应对Ray的所有提问:1、测试环境的准确性,失
keepalive是HTTP/1.1协议中的一个特性,它允许客户端和服务器之间的TCP连接在一个HTTP请求/响应周期结束后保持打开状态,以便在后续的请求中重复使用。这样可以减少TCP连接的建立和关闭次数,从而提高性能。
我们有个业务,会调用其他部门提供的一个基于http的服务,日调用量在千万级别。使用了httpclient来完成业务。之前因为qps上不去,就看了一下业务代码,并做了一些优化,记录在这里。
HttpClient优化思路1、池化 2、长连接 3、httpclient和httpget复用 4、合理的配置参数(最大并发请求数,各种超时时间,重试次数)5、异步 6、多读源码
本文告诉大家如何在 dotnet 6 下使用 HttpClient 更加精细的控制网络请求的超时,实现 HttpWebRequest 的 ReadWriteTimeout 功能
现象说明: 在服务器上部署了一套后台环境,使用的是nginx反向代理tomcat架构,在后台里上传一个70M的视频文件,上传到一半就失效了! 原因是nginx配置里限制了上传文件的大小 client_max_body_size:这个参数的设置限制了上传文件的大小,可以在http、server、location三个区域里配置 [root@dev-huanqiu ~]# cat /Data/app/nginx/conf/nginx.conf ....... ....... http { include
HTTP调用既然是网络请求,就可能超时,超时错误分两种,connect timeout和read timeout,前者可能是网络问题,或者服务端连接池不够用了。后者是连接已经建立了,但是服务端太忙了,不能及时处理完你的请求。
在现代企业级应用中,数据库连接是至关重要的部分。而数据库连接池作为数据库连接管理的核心组件,对于提升系统性能和稳定性具有重要意义。本文将深入探讨数据库连接池的性能优化,包含代码示例,帮助读者更好地理解和应用连接池技术。
【问题场景】 客户端以 consumer 身份订阅到 rabbitmq server 上的 queue 上,客户端侧在 AMQP 协议的 Connection.Tune-Ok 信令中,设置 heartbeat 为 0,即要求服务器侧不启用 heartbeat 功能。服务器由于异常断电原因停止服务,结果客户端在短时间内无法感知到服务器端已经异常。
本文简要的分析了长连接产生的背景以及所解决的问题,并对比了keep-alive与心跳机制对长连接保活的影响,最后详细的介绍了心跳保活的两个关键因素–DHCP协议与NAT原理。如有不当之处,欢迎批评和指正。
最近业务方反馈线上 Nginx 经常会打出一些『奇怪』的 access 日志,奇怪之处在于这些日志的 request_time 值总是正好 upstream_response_time 的值大5秒,于是我就帮他们查看了一下导致这个问题的原因,本文记录一下最终调查的结论以及过程。
大致问题是,TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗?
某部分客户业务使用cos的node.js的sdk来进行上传下载等操作,近期客户端偶尔触发上传文件报错{ error: { code: 'ECONNRESET' } } 的异常。
运行工作进程数、运行CPU亲和力、最大打开文件数、gzip调优、防盗链、隐藏版本号、隐藏软件名、优化woeker进程数、优化nginx连接超时时间
服务端推 服务端推,指的是由服务器主动的向客户端发送消息(响应)。在应用层的HTTP协议实现中,“请求-响应”是一个round trip,它的起点来自客户端,因此在应用层之上无法实现简易的服务端推功能。当前解决服务端推送的方案有这几个: 客户端长轮询 websocket双向连接 iframe永久帧 长轮训虽然可以避免短轮训造成的服务端过载,但在服务端返回数据后仍需要客户端主动发起下一个长轮训请求,等待服务端响应,这样仍需要底层的连接建立而且服务端处理逻辑需要相应处理,不符合逻辑上的流程简单的服务端推送; w
解决这类问题的方案之一,就是将项目包装为桌面客户端,就像双击 Excel 那样,就可以进入项目。
11-01 12:00 中午午饭期间,手机突然收到业务网关非200异常报警,平时也会有一些少量499或者网络抖动问题触发报警,但是很快就会恢复(目前配置的报警阈值是5%,阈值跟当时的采样窗口qps有直接关系)。
Supervisor管理器 启动Django项目 或者 python 项目,启动命令 python3.8 /项目目录/manage.py runserver 0.0.0.0:端口号
HTTP1.1之后,HTTP协议支持持久连接,也就是长连接,优点在于在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。
MOOON-server提供了一个通用的TCP框架,并对包的解析抽象出了IPacketHandler接口,这个接口提供了无限制的宽容度,支持任何协议,但是增加了使用复杂。
1.背景 我们有个业务,会调用其他部门提供的一个基于http的服务,日调用量在千万级别。使用了httpclient来完成业务。之前因为qps上不去,就看了一下业务代码,并做了一些优化,记录在这里。 先对比前后:优化之前,平均执行时间是250ms;优化之后,平均执行时间是80ms,降低了三分之二的消耗,容器不再动不动就报警线程耗尽了,清爽~ 2.分析 项目的原实现比较粗略,就是每次请求时初始化一个httpclient,生成一个httpPost对象,执行,然后从返回结果取出entity,保存成一个字符串,最后显
HTTP调用即通过HTTP协议执行一次网络请求。既然是网络请求,就有超时的可能性(可能你的网卡,也可能服务器所处网络卡),因此在开发中需要注意:
笔者把自己总结的文档分为几遍,合集在 https://g.xgss.net/nginx/
导读 导致“Connection reset”的原因是服务器端因为某种原因关闭了Connection,而客户端依然在读写数据,此时服务器会返回复位标志“RST”,然后此时客户端就会提示“java.net.SocketException: Connection reset”。可能有同学对复位标志“RST”还不太了解,这里简单解释一下:
RestTemplate是基于HttpClient的,Feign也可以指定使用HttpClient。
深入了解nginx,get到nginx的一些性能优化方向。除了了解如何保持长连接,也通过本案例学习到开源中间件的一些常用定位思路和优化方法。
由于WCF的机制,连接池会在连接建立一定时间后超时,即使设置了超时时间非常长,也可能被服务端系统主动回收。之前做项目时碰到了这个问题,所以项目上考虑采用长连接,自动管理连接池,当连接超时后,自动重建,保持会话,这样在业务层就不需要再去处理连接超时的问题。具体的思路是,在程序启动时,先将需要使用长连接的连接放到长连接容器中,并设置连接的最大数量,在使用时,轮询使用连接,当使用时捕获到异常时,自动切换到下一个连接,并重建上一个连接。代码如下:
号外号外!微信 Mars 已于2016年12月28号的微信公开课上,正式公开了源代码,加入了开源阵营。相信很多小伙伴已经看到了 Mars 的代码,在这里热切的期望小伙伴们多给 Mars 提pr & Issues,共同促进移动网络技术的发展。开源只是一个开始,我们也将继续在 WeMobileDev 的公众号上,分享 Mars 的技术细节与未来规划。 前言 Mars 是微信官方的终端基础组件,是一个使用 C++ 编写的业务无关、跨平台的基础组件。目前在微信 Android、iOS、Windows、Mac、WP
nginx-gateway部署在公有云 A, 业务测试服务器部署在办公区机房B, 公有云region A 和 办公区机房 B通过soft V**互连。B机房中有不同类型的应用服务器【nodejs,java(tomcat)】做nginx-gateway的后端upstream节点。nginx-gateway编译安装了ngx_http_upstream_check_module插件,ngx_http_upstream_check_module用于做后端upstream节点的健康监测, healthcheck为每个upstream的后端节点配置有一个raise_counts/fall_couts状态的计数器。业务方同事反馈:从外部访问内部某些应用有概率出现超时, 经观察, nodejs,java(tomcat)的raise_counts计数器概率性地重置为0,
对后台应用程序而言几乎离不开操作数据库,而操作数据库绝对是要跟连接池 pool 打交道的。
vivo 人工智能计算平台小组从 2018 年底开始建设 AI 计算平台至今,已经在 kubernetes 集群、以及离线的深度学习模型训练等方面,积累了众多宝贵的开发、运维经验,并逐步打造出稳定的基础容器平台 - AI 容器平台(VContainer)。为了支撑公司 AI 在线业务的发展,满足公司对算力资源的高效调度管控需求,需要将在线业务,主要包括 C 端、推理等业务,由原来的虚拟机或物理机迁移至 AI 容器平台。于是小组从 2020 年初开始,基于在线业务的需求对 AI 容器平台进行进一步建设,并将平台与公司的 CMDB、CICD 等基础模块进行打通,使在线业务能够顺利从虚拟机、物理机迁移至 AI 容器平台。
特别说明:本文针对的是新版 spring boot 2.1.3,其 spring data 依赖为 spring-boot-starter-data-redis,且其默认连接池为 lettuce
对于云上的用户来说,业务日志里面报超时问题处理起来往往比价棘手,因为1) 问题点可能在云基础设施层,也有可能在业务软件层,需要排查的范围非常广;2) 这类问题往往是不可复现问题,抓到现场比较难。在本文里就分析下如何来分辨和排查这类问题的根本原因。
out_forward是一个带缓存的输出插件,用于向其他节点转发日志事件,并支持转发节点之间的负载均衡和自动故障切换。
Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优。光TCP的调优参数就有50多个。在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数。在此分享出来,希望对大家有所帮助。
领取专属 10元无门槛券
手把手带您无忧上云