摘要:一背景之前使用服務(wù)為頁面進(jìn)行實(shí)時數(shù)據(jù)推送,突然有一天產(chǎn)品給我反饋,說該頁面的實(shí)時刷新功能失效了,于是開始進(jìn)行排查和處理,并將過程記錄下來。這個服務(wù)是有監(jiān)控程序的,每分鐘檢查一次是否正常,不正常的話會將進(jìn)程全部殺掉進(jìn)行重啟。
一、背景之前使用websocket服務(wù)為H5頁面進(jìn)行實(shí)時數(shù)據(jù)推送,突然有一天產(chǎn)品給我反饋,說該頁面的實(shí)時刷新功能失效了,于是開始進(jìn)行排查和處理,并將過程記錄下來。
這個服務(wù)是有監(jiān)控程序的,每分鐘檢查一次websocket是否正常,不正常的話會將進(jìn)程全部殺掉進(jìn)行重啟。
當(dāng)天接到反饋后,我看了下服務(wù),監(jiān)控程序是正常的,會對websocket進(jìn)行重啟,但每次重啟過后不超過30s,websocket的master節(jié)點(diǎn)就又掛了。
情況就是這樣的,下面進(jìn)入排查流程。
二、master節(jié)點(diǎn)為什么會掛掉?在官網(wǎng)上有列舉以下三種情況會導(dǎo)致無法提供服務(wù):
(1)系統(tǒng)負(fù)載過大swoole無法申請到內(nèi)存而掛掉 (2)swoole底層發(fā)生段錯誤 (3)Server占用內(nèi)存過大被內(nèi)核Kill,或者被某些程序誤殺
但是根據(jù)當(dāng)前環(huán)境,并不符合上述情況,所以這個問題暫時還沒有找到具體的原因。
三、根據(jù)日志報錯解決(1)首先看了下nginx的error.log,發(fā)現(xiàn)大量報錯:
13247#0: *176909901 connect() failed (111: Connection refused) while connecting to upstream,
看了下nginx配置,可以看出一開始的配置是很小的,所以對幾個配置進(jìn)行增大
worker_processes 1; //worker角色的進(jìn)程個數(shù) worker_rlimit_nofile 1024;// 更改worker進(jìn)程的最大打開文件數(shù)限制。 worker_connections 1024;//每一個worker進(jìn)程能并發(fā)處理(發(fā)起)的最大連接數(shù)(包含所有連接數(shù))
(2)swoole自帶的log日志中也有很多報錯:
ERROR swServer_master_onAccept (ERROR 502): accept() failed. Error: Too many open files[24]
(3)還有在程序啟動會輸出:
WARN swServer_start_check: serv->max_conn is exceed the maximum value[1024].
官方解釋為啥會出現(xiàn)這個報錯,所以說明當(dāng)前的問題就是因為ulimit -n設(shè)置的過低導(dǎo)致的問題:
max_connection最大不得超過操作系統(tǒng)ulimit -n的值,否則會報一條警告信息,并重置為ulimit -n的值
綜合(2)(3)可以得出結(jié)論就出在這個ulimit -n上面了,之前也修改過這個值但實(shí)際上并沒有生效。
ulimit -n 指定同一時間最多可打開的文件數(shù)
vim /etc/security/limits.conf -------永久修改
ulimit -n 1024 -----------------------即時修改,但重啟后就無效了
四、后續(xù)問題
(1)訪問量上來后,發(fā)現(xiàn)會出現(xiàn)redis偶爾鏈接失敗的報錯,查找原因是因為大量建立鏈接導(dǎo)致機(jī)器上的端口都在使用中,通過調(diào)整內(nèi)核參數(shù)解決。
vim /etc/sysctl.conf 編輯文件,加入以下內(nèi)容: net.ipv4.tcp_tw_reuse = 1 //表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉; net.ipv4.tcp_tw_recycle = 1 //表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認(rèn)為0,表示關(guān)閉。 然后執(zhí)行/sbin/sysctl -p讓參數(shù)生效。
(2)訂閱redis后,一段時間后會無法收到信息。原因暫時不明,通過增加鏈接超時捕獲異常后重新建立訂閱請求解決。
ini_set("default_socket_timeout", 10);
五、后記
整理文檔的同時就是將解決問題的過程重新復(fù)盤一遍,以后解決這種問題的思路就會比較清晰了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/6897.html
摘要:本篇博客主要介紹了自動化工具這個概念,在微服務(wù)集群當(dāng)中的作用,算拋磚引玉,歡迎大家提出自己的見解。而在微服務(wù)中,單個服務(wù)重新部署的代價明顯要小的多。 本篇博客主要介紹了自動化工具這個概念,在微服務(wù)集群當(dāng)中的作用,算拋磚引玉,歡迎大家提出自己的見解。 寫在前面 在了解自動化工具的概念之前,我們先了解一下微服務(wù)和集群的概念。 什么是微服務(wù) 這個概念其實(shí)有些廣泛,而我的知識廣度也有限,我會盡...
摘要:考拉訂單流推送申報單推送物流信息等供應(yīng)鏈相關(guān)業(yè)務(wù)已接入分片任務(wù),極大提高了業(yè)務(wù)吞吐量降低壓力,提升了通關(guān)效率。支撐雙十一黑五雙十二等大促,高峰期統(tǒng)一暫停非關(guān)鍵定時任務(wù),讓出系統(tǒng)資源,提高業(yè)務(wù)系統(tǒng)穩(wěn)定性。 此文已由作者楊凱明授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營經(jīng)驗。 1.背景 目前項目中使用的定時任務(wù)框架存在下面這些問題 沒有統(tǒng)一的定時任務(wù)管理平臺 目前項目...
摘要:在十二贊的深度應(yīng)用我們是十二贊,一個致力于幫助電商賣家進(jìn)入小程序的小團(tuán)隊,我們的主頁是。我們的整個業(yè)務(wù)構(gòu)建于阿里云之上,有臺每一對都有獨(dú)立的外網(wǎng)同時也在同一個內(nèi)網(wǎng)之中。,我們把所有的文件都挪到阿里云的服務(wù)上。當(dāng)然,也是可執(zhí)行文件發(fā)布的。 Golang 在十二贊的深度應(yīng)用 我們是十二贊,一個致力于幫助電商賣家進(jìn)入小程序的小團(tuán)隊,我們的主頁是http://www.12zan.cn/。在實(shí)際...
摘要:創(chuàng)建彈幕功能的類及基本參數(shù)處理布局時需要注意的默認(rèn)寬為,高為,我們要保證完全覆蓋整個視頻,需要讓與寬高相等。因為我們不確定每一個使用該功能的視頻的寬高都是一樣的,所以畫布的寬高并沒有通過來設(shè)置,而是通過在類創(chuàng)建實(shí)例初始化屬性的時候動態(tài)設(shè)置。 showImg(https://segmentfault.com/img/remote/1460000018998386); 閱讀原文 頁面布...
摘要:創(chuàng)建彈幕功能的類及基本參數(shù)處理布局時需要注意的默認(rèn)寬為,高為,我們要保證完全覆蓋整個視頻,需要讓與寬高相等。因為我們不確定每一個使用該功能的視頻的寬高都是一樣的,所以畫布的寬高并沒有通過來設(shè)置,而是通過在類創(chuàng)建實(shí)例初始化屬性的時候動態(tài)設(shè)置。 showImg(https://segmentfault.com/img/remote/1460000018998386); 閱讀原文 頁面布...
閱讀 665·2021-11-15 11:39
閱讀 2902·2021-10-08 10:04
閱讀 3266·2019-08-30 10:57
閱讀 3027·2019-08-26 13:25
閱讀 1911·2019-08-26 12:14
閱讀 2639·2019-08-23 15:27
閱讀 2999·2019-08-23 15:18
閱讀 1778·2019-08-23 14:26