Epoll 連線無響應或響應時間過長

2021-06-20 19:18:11 字數 1008 閱讀 1340

epoll有兩種模式,lt模式 與 et模式。預設情況下是lt模式,由於et模式在高併發,高流量的情況下,處理效率會高於et模式,所以也就採用了et模式。

伺服器一直執行良好,跑幾千機械人也沒有什麼問題。

但突然之間發現,機械人在反覆掉線上線的測試後,會出現一種情況:伺服器端會再也收不到客戶端的連線事件,或者這個連線事件響應會非常慢,而已連線成功的fd讀寫資料是沒有任何問題的。

主要的原因還是因為et模組的**編寫要求比較高,lt模式就像汽車的自動檔,你只要掛上檔,就能把速度搞上去。而et模式有點像汽車的手動檔,任何時候變速都是需要你自己操作的。lt是條件觸發,只要滿足條件,是一直觸發,直到你把它處理完成。而et有點型別是事件觸發,發生了某個事件的時候,他只觸發一次,如果這一次你沒能在邏輯裡寫處理好,那就不會再觸發了,那這個事件的處理就被丟失。

所以我的問題應該還是沒能把et模式用好,最後的解決辦法大概如下,還原回了預設的方式:

bind(listenfd,(sockaddr *)&serveraddr, sizeof(serveraddr));

listen(listenfd, listenq);

ev.data.fd=listenfd;

ev.events=epollin;//監聽的fd 用預設的epolllt模式

if(events[i].data.fd==listenfd)   //如果新監測到乙個socket使用者連線到了繫結的socket埠,建立新的連線。

setnonblocking(connfd);

ev.data.fd=connfd;

| epollet;

ev.events=epollin;//這裡也用預設的epolllt模式

epoll_ctl(epfd,epoll_ctl_add,connfd,&ev);

}

響應時間優化

業務不停的迭代,加上打工人換了一波又一波,導致很多業務介面特別重,可讀性非常的差。最近專案在重構優化,部分介面平均響應時間在 1.5s 左右,對於使用者體驗來說,非常的不友好。本文旨在提出幾個介面優化的一些常用的辦法。1 優化的準則 一切的前提是業務價值需要。如果沒有足夠的價值,那麼可讀性才是第一,...

Eureka響應時間優化

1 心跳傳送時間間隔 eureka.client.leaserenewalintervalinseconds 2 心跳檢查間隔 eureka.server.evictionintervaltimerinms 3 readwrite 快取 同步到 readonly 快取中的 間隔時間 eureka.s...

APP響應時間和響應速度測試

測試方法 冷啟動 adb shell am start w com.ui.launcherui 絕對路徑,首個activity。dos命令下獲取路徑命令 adb shell dumpsys window w findstr findstr name am是shell中整合的乙個命令,activity...