我的[GO]語言程式變大了?

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

程式很簡單,通過簡單的http請求來守護伺服器背景程式

package mainimport ("fmt""net""net/http""strings""time")var (info    []net.Addrip      stringgeturl  stringrequest *http.Requestresp    *http.Responseclient  *http.Clientipx     string)func main() {info, _ = net.InterfaceAddrs()ip = strings.Split(info[0].String(), "/")[0]fmt.Println(ip)fmt.Println("alarm will begin in 30 second..")fmt.Println("please DO NOT close..")i := 10for i > 0 {time.Sleep(time.Second * 1)fmt.Println(i)i--}geturl = "http://" + ip + "/alarmbegin"request, _ = http.NewRequest("GET", geturl, nil)///not mustclient = &http.Client{}resp, _ = client.Do(request)fmt.Println(resp)fmt.Println("done")go Iva()Ivs()}func IvsOffLine() {//ivs斷線處理info, _ = net.InterfaceAddrs()ipx = strings.Split(info[0].String(), "/")[0]//fmt.Println(ipx)if ipx == "0.0.0.0" {fmt.Println("network problem....")fmt.Println(strings.Split(info[0].String(), "/")[0])for strings.Split(info[0].String(), "/")[0] == "0.0.0.0" {time.Sleep(time.Second * 5)info, _ = net.InterfaceAddrs()}fmt.Println("network problem fixed.. alarm will restart in 1 min")time.Sleep(time.Second * 30)geturl = "http://" + strings.Split(info[0].String(), "/")[0] + "/refresh"request, _ = http.NewRequest("GET", geturl, nil)resp, _ = client.Do(request)fmt.Println(resp)time.Sleep(time.Second * 2)fmt.Println("alarm begin..")geturl = "http://" + strings.Split(info[0].String(), "/")[0] + "/alarmbegin"request, _ = http.NewRequest("GET", geturl, nil)resp, _ = client.Do(request)fmt.Println(resp)fmt.Println("done..")}}//iva 斷線處理func IvaOffLine() {defer func() { //必須要先聲明defer,否則不能捕獲到panic異常if err := recover(); err != nil {fmt.Println(err) //panic}}()geturl = "http://192.168.10.57/milsng/SVSProxy/"request, _ = http.NewRequest("GET", geturl, nil)resp, _ = client.Do(request)if resp == nil {fmt.Println("iva connect fail...try to reconnect")for resp == nil {time.Sleep(time.Second * 5)geturl = "http://192.168.10.57/milsng/SVSProxy/"request, _ = http.NewRequest("GET", geturl, nil)resp, _ = client.Do(request)fmt.Println("iva connect fail...try to reconnect")}fmt.Println("iva connect refreshing... pls wait")info, _ = net.InterfaceAddrs()if strings.Split(info[0].String(), "/")[0] != "0.0.0.0" {time.Sleep(time.Minute * 10) //等待10分鐘,目的是等待iva伺服器恢複geturl = "http://" + strings.Split(info[0].String(), "/")[0] + "/refresh"request, _ = http.NewRequest("GET", geturl, nil)resp, _ = client.Do(request)fmt.Println(resp)time.Sleep(time.Second * 2)fmt.Println("alarm begin..")geturl = "http://" + strings.Split(info[0].String(), "/")[0] + "/alarmbegin"request, _ := http.NewRequest("GET", geturl, nil)resp, _ = client.Do(request)fmt.Println(resp)}}//fmt.Println("iva connect success")}func Ivs() {ivs := time.NewTicker(10 * time.Second)for {select {case <-ivs.C:IvsOffLine()}}}func Iva() {iva := time.NewTicker(10 * time.Second)for {select {case <-iva.C:IvaOffLine()}}}

首先 在代碼中加入了runtime.GC, 回收垃圾, 結果無效,看來並不是未釋放的記憶體

然後嘗試了debug.freeosmemory  從來釋放堆記憶體給系統 ,還是在不斷變大!!!


後來發現是  TCP串連,

在代碼中加入


if resp != nil {resp.Body.Close()}

 關閉 io , 遂解決

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.