第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Golang中打開文件過多錯(cuò)誤

Golang中打開文件過多錯(cuò)誤

Go
胡子哥哥 2022-01-17 18:10:50
我只是在閱讀/proc/diskstats文件。我的代碼是:func ReadFromFile(filepath string)(string){    defer func() {        if err1 := recover(); err1 != nil {            fmt.Println("!!!!!!!!!!!!!!!!Panic Occured and Recovered in readFromFile(), Error Info: ", err1)        }     }()    strData := ""    data, err := ioutil.ReadFile(filepath)    if err != nil{        fmt.Println("File read error: ", err)        return ""    }    strData = string(data)    return strData}我得到的錯(cuò)誤是:File read error: open /proc/diskstats: too many open files不僅對于這個(gè)文件,我對其他一些文件也遇到了同樣的錯(cuò)誤。我也運(yùn)行了這個(gè)命令:root@golang:~# lsof|wc -l785請指導(dǎo)我。
查看完整描述

3 回答

?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊

我遇到了同樣的問題(可能是不同的情況或設(shè)置)并以不同的方式修復(fù)它:


func some_func(file_name []string) {

    for _, file_name := range file_names {

        f, _ := os.Create(file_name)

        // defer f.Close() // bad idea

        _, _ = f.Write([]byte("some text"))

        f.Close() // better idea

    }

}

問題是defer它將在函數(shù)返回時(shí)執(zhí)行,這可能需要一段時(shí)間 - 取決于循環(huán)大?。▔闹饕猓?。所以只要做明確(更好的主意)


查看完整回答
反對 回復(fù) 2022-01-17
?
蕭十郎

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊

基本上在 UNIX 平臺(tái)中,操作系統(tǒng)對進(jìn)程在任何給定時(shí)間可能擁有的打開文件描述符的數(shù)量進(jìn)行了限制。由于您已達(dá)到當(dāng)前打開的文件(和/或管道或套接字)的限制,并且您正在嘗試打開一個(gè)新文件(和/或管道或套接字),因此引發(fā)了
錯(cuò)誤。 為避免此問題,您必須在完成使用打開的文件后關(guān)閉文件too many open files
Close()

查看完整回答
反對 回復(fù) 2022-01-17
?
SMILET

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

OP 沒有提供最小的、可重現(xiàn)的示例。有問題的錯(cuò)誤是由未發(fā)布的代碼引起的。演示這一點(diǎn)的一種簡單方法是簡單地在一個(gè)最小示例中運(yùn)行提供的代碼(沒有其他活動(dòng)),并查看它沒有失敗。


函數(shù)ioutil.ReadFile當(dāng)然會(huì)關(guān)閉文件。在這種情況下,它被牽連,只是因?yàn)樗噲D在已經(jīng)達(dá)到資源限制時(shí)打開一個(gè)新文件。


Go 中的一個(gè)常見問題是無法關(guān)閉隱式打開的流。這種情況的一個(gè)特定情況是在使用http庫的客戶端函數(shù)時(shí)打開了一個(gè)流。


示例:(1), (2)


客戶端完成后必須關(guān)閉響應(yīng)正文:


resp, err := http.Get("http://example.com/")

if err != nil {

    // handle error

}

defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body)

此類請求應(yīng)始終包括對 的調(diào)用Close,使用如上所示的形式。


可能還有其他類似的隱式流被打開的情況......


這是一個(gè)特別棘手的問題,因?yàn)閷τ诂嵥榈某绦颍肋h(yuǎn)不會(huì)知道其中的區(qū)別。直到您通過數(shù)百或數(shù)千次迭代運(yùn)行此程序時(shí),您才會(huì)知道存在問題。然后,錯(cuò)誤通??赡鼙憩F(xiàn)為某些不相關(guān)的函數(shù)調(diào)用失敗——正如 OP 所展示的那樣。


查看完整回答
反對 回復(fù) 2022-01-17
  • 3 回答
  • 0 關(guān)注
  • 277 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)