起因 最近几天很多半托管客户,突然报连接服务失败,登上服务器后查看内存很高,为了让客户尽快恢复业务,运维同事第一时间选择了重启。 top图 重启后,内存肉眼可见的速度涨了上来,研发同事判断后,可能之后又需要重启,临时给客户部署了备用服务。 冰山一角• 日志 日志 Too many open files 代表已经到了当前进程可以打开的最大文件数,第一时间选择了先加大当前进程打开的最大文件数,让后续的请求可以正常处理echo - n "Max open files=85535:85535" > /proc/pid/limits 通过命令查看当前已经打开的文件数lsof -p pid | wc -l43326 正常的进程不可能打开这么多fd,所以应该存在连接泄漏lsof - p pid | grep can"t identify protocol jstack打印当前的堆栈jstack -l pid > pid.txt 找到当前堆栈中使用http地方,排查代码,检查代码有可能没close连接的地方。 修复好代码,上线后,重启进程,在观察发现内存很平稳,打开的文件数也逐渐平稳。 第二天,第三天陆续有其他半托管客户找过来,同样的问题,内存泄漏,最大文件数一直居高不下,直到达到限制。 和上面的客户一样,修复同样的代码后,均都恢复了正常。 提问 1、为什么都是半托管的客户报这个问题,公有云未有客户反馈 2、这些半托管的客户为了稳定,代码已经很久没升级,代码都是2021年的,为什么都跟商量好似的,一起报问题,难道我有bug吸引体质? 3、为什么这些客户,物理机房隔离,问题表象却都一样? 4、客户需要一个合理的解释,我总不能说网络抽风了吧? 所有不合理的地方,其实都有合理的解释 半托管:后端服务和敏感数据在客户机房,前端网页在公有云。 理性分析 由于都是半托管客户,又都是因为fd太多,导致的内存泄漏。 那我们有一点是可以肯定的,那就是连接过多,导致fd激增,既然是网络问题,那我们就使用 万能法则 (遇事不决,先抓个包)tcpdump -i any tcp -w tcp.pcap 抓完包后使用wireshark进行分析,发现有很多OPTIONS请求。 wireshak分析options waht? 这个请求是使用jsonp的方式,为什么会存在options请求 在查看原本GET请求的内容 在这里插入图片描述 然后在公有云相同的服务器抓了个包,发现只有get请求,没有options请求,那可以说明这个options请求,只有在出现问题的半托管机器上有 但是我们有那么多半托管客户,报问题的却只有几个 大胆假设 我们都知道options是浏览器发的跨域预检请求,那说明这件事和浏览器脱不了干系,通过抓包文件来看,发options请求的浏览器的版本都是chrome 104版本。 嗯,chrome居然又更新了,我们大胆假设一下,内存泄漏和chrome版本有关系。 为了验证我的假设,我找到了chrome的升级说明。 嗯,果然只有假设才会有答案 附上 chrome的升级说明 。如果打不过也可以看下 github的这个说明 • 大概意思就是说: 如果你从公网访问私有网络,那么会在chrome104版本,发option进行预检,该请求带有一个新的标头(Access-Control-Request-Private-Network: true)。 在这个初始阶段,这个请求被发送,但是目前阶段你收到可以不响应,后续的请求还是会正常发送,并不会影响到你的业务,只会在 DevTools 中显示警告 下图带有private的为私有网络 私有网络定义 我处理的半托管客户,ip地址都为192x,172x,10x,全都属于私有网络,又都从公有云的网站发起请求,正好符合104版本描述的条件。 而且服务的代码比较老,收到options请求,没有正常释放,导致了内存泄漏。 你能想到一个内存泄漏,居然是因为chrome自动更新导致的吗? 总结 1、为什么都是半托管的客户报这个问题,公有云未有客户反馈 答:只有半托管客户满足公有ip访问私有ip的条件,且部分用户的chrome浏览器自动更新了 2、这些半托管的客户为了稳定,代码已经很久没升级,代码都是2021年的,为什么都跟商量好似的,一起报问题,难道我有bug吸引体质? 答:chrome自动更新导致 3、为什么这些客户,物理机房隔离,问题表象却都一样? 答:chrome自动更新导致,代码版本都比较老 4、客户需要一个合理的解释,我总不能说网络抽风了吧? 答:不知道chrome发表的版本说明,能不能说服客户 5、是不是只有chrome104版本受影响? 答:应该和chrome104同版本的其他浏览器也会受影响,测试edge也会有影响 6、如何判断我的网站受到影响。 答:首先需要满足公网访问私有网络的条件,其次可以在chrome请求或者抓包中,查看请求头有没有该标头 在这里插入图片描述 7、访问内网的https受影响不 答:上图就是访问https的服务,会受到影响 8、设置chrome://flags/#block-insecure-private-network-requests 可以避免不 答:我测试104版本没效果 9、服务端如何兼容 答:服务器应检查是否存在Access-Control-Request-Private-Network: true标头。如果请求中存在此标头,则服务器应检查Origin标头和请求路径以及任何其他相关信息(例如Access-Control-Request-Headers)以确保请求是安全的。通常,您应该允许访问您控制下的单个源。 一旦您的服务器决定允许该请求,它应该响应204 No Content(或200 OK)必要的 CORS 标头和新的 PNA 标头。这些标头包括Access-Control-Allow-Origin和Access-Control-Allow-Private-Network: true,以及其他需要的标头。 响应示例HTTP/1.1 204 No ContentAccess-Control-Allow-Origin: https://foo.exampleAccess-Control-Allow-Private-Network: true 或者HTTP/1.1 200 No ContentAccess-Control-Allow-Origin: https://foo.exampleAccess-Control-Allow-Private-Network: true 10、服务端要不要兼容更新 答:我认为是有必要的,现在chrome发起options请求,你响应或者不响应都不会阻止后续的请求,但是如果他那天在自动更新,你如果未正常处理options请求,就不发送后续业务请求,
武汉新城登云台,来了!武鄂交会处武汉新城中心,一座登云台已拔地而起,即将于今年6月投入使用。武汉新城登云台效果图。记者从湖北联投新城集团获悉,位于光谷东数字经济产业园的新城展示中心主体结构已封顶。据悉,樱你而来!贵阳公交黔爽巴士2023贵安樱花园专线即将开通每年的阳春三月贵州迎来属于它的花海世界在贵安樱花园万亩樱花正含苞待放喜迎万千旅人这里有世界上最大的樱花基地,胜过台湾,不输日本,甚至还被外国媒体称为蓝色星球最美的樱花园之一。每年的分析巴比伦空中花园的历史与传说在古代世界的七大奇迹中,只有一个没有被考古学家发现。古希腊世界充满了流浪者。从奥德修斯的史诗般的旅程,到雇佣兵商人旅行者和作家,人们从希腊大陆出发,前往地中海及更远的角落冒险。这些这里被誉为上帝后花园,江浙沪周边,安吉亲子旅游攻略安吉县,隶属于浙江省湖州市,位于长三角腹地,天目山脉自西南入境,分东西两支环抱县境两侧,呈三面环山,中间凹陷,东北开口的畚箕形的辐聚状盆地地形。地势西南高东北低。属亚热带海洋性季风一路向南莆田少林寺南少林寺,前身为林泉院,福建省莆田市荔城区西天尾镇九莲山林山村,距市区约17千米。南少林寺始建于南朝陈永定元年(557年)。唐初因十三棍僧救唐主有功,太宗皇帝特敕北少林昙宗方丈,在马云的贵人,曾资助他上大学,帮他西湖边买房娶媳妇张瑛!有网友在澳洲看到了马云。而且描述马云穿着15块钱的布鞋,喝着3元一瓶的可乐。正当所有人都关心马云是否去澳洲有大动作之时,紧接着看到了这张照片之后便都明白了他此行是去串亲戚。照片中跟一箭三伤!血亏235万元谁担责?券商业务员代客理财惹火烧身华夏时报(www。chinatimes。net。cn)记者张玫陈锋北京报道近日,中国裁判文书网一则判决书显示,信达证券阜新解放大街证券营业部业务员张某辉因代客理财亏损235万元,被36式少林擒拿反击术,防身绝技枕边秘笈,集历代武僧格斗之精华头条创作挑战赛本篇是少林擒拿反击招式(2530式),掐筋点穴踢打摔拿,格斗精华的续篇。你点击该链接,就能在本账号内找到该拳法的130式的详细图文讲解。收藏本篇就是收藏了整套36式少徐梦迪著名女演员闫学晶儿媳妇,嫁星二代老公林傲霏孕妇照惊艳头条创作挑战赛娱乐娱评大赏影视杂谈请关注年龄不是人生的枷锁,每天给你带来一位名人感人的故事。小编白杨徐梦迪,中国内地女演员,出道以来先后拍摄过衰爸神童等4部数字电影,出演过音乐剧白这座寺庙被日本和东南亚僧人奉为祖庭,文革时几乎被夷为平地头条创作挑战赛新人破万互动联盟头条小组红人扶持计划成都,一座中国西部的现代化中心城市,这里不仅经济发达,而且历史悠久,文化底蕴深厚。在成都市区东北角,就隐藏着一座具有一千多年历史的苏州西园寺的撸猫女孩妙趣横生的寺庙一天下午,我走进苏州西园寺。在寺庙宽阔的院子里,看见三位二十多岁的女孩挤在一起,埋头蹲在地上,神情专注,不知干嘛?正纳闷之间,旁边一位寺庙老阿姨忽然喊了一声你们几个人不要再撸猫了。