码迷,mamicode.com
首页 > 其他好文 > 详细

golang 错误 too many open files

时间:2021-01-22 11:53:36      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:adl   int   sel   lag   http   lock   pack   any   ror   

问题 too many open files错误

最近在看golang,写了个扫描title的脚本,发现打开文件的时候会报错,记录下。

too many open files

https://github.com/Stu2014/go

package main

import (
	"bufio"
	"crypto/tls"
	"encoding/csv"
	"flag"
	"fmt"
	"io/ioutil"
	"net/http"
	"os"
	"regexp"
	"strconv"
	"sync"
	"time"
)

/*

用的colly模块,-f指定文件名

*/
var wg sync.WaitGroup

func scnafile(file string, url chan string)  {
	files, err := os.Open(file)
	if err != nil {
		fmt.Println("open error")
	}
	defer files.Close()
	//n := bufio.NewReader(files)
	//for {
	//	a, _, c := n.ReadLine()
	//	if c == io.EOF {
	//		break
	//	}
	//	fmt.Println(string(a),"aaa")
	//	url <- string(a)
	//}
	n := bufio.NewScanner(files)
	for n.Scan(){
		fmt.Println(n.Text())
		url <- n.Text()
		continue
	}
	err_ := n.Err()
	if err_ != nil {
		fmt.Println("Error scanner")
	}
	close(url)

}

func reurl(url chan string)  {
	timeUnix := time.Now().Format("2006-01-02 15:04:05")+".csv"
	for{
		select {
		case xdd, ok := <-url:
			if !ok {
				wg.Done()
				return
			}
		tr := &http.Transport{
			TLSClientConfig: &tls.Config{InsecureSkipVerify:true},
		}
		client := &http.Client{Transport:tr}
		url := xdd
		req, err := http.NewRequest("GET", url, nil)
		if err != nil {
			fmt.Println("url2 error")
			continue
		}
		resp, err := client.Do(req)
		if err != nil {
			fmt.Printf("url: %s error\n", url)
			continue
		}
		defer resp.Body.Close()

		content, _ := ioutil.ReadAll(resp.Body)
		r := regexp.MustCompile(`<title>(.*)</title>`)
		ret := r.FindAllStringSubmatch(string(content),-1)
		//fmt.Println(ret)
		for _, substr := range ret  {
			fmt.Printf("[%d+] %s %s %s \n",resp.StatusCode, substr[1], xdd, resp.Header.Get("Server"))
			writeurl(timeUnix, strconv.Itoa(resp.StatusCode), xdd, substr[1], resp.Header.Get("Server"))
		}
		case <- time.After(time.Duration(2) * time.Second):
			wg.Done()
			return


		}
	}
}

//写文件
func writeurl(time_ string, code string, url string, title string, serverver string)  {
	file , err := os.OpenFile(time_, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	_, _ = file.WriteString("\xEF\xBB\xBF")
	if err != nil {
		fmt.Println("open file err:", err)
	}
	defer file.Close()
	w := csv.NewWriter(file)
	_ = w.Write([]string{url, title, code, serverver})
	w.Flush()
}

func main() {
	url :=make(chan string)
	var filename string

	flag.StringVar(&filename, "f", "", "请输入url文件名字")
	flag.Parse()
	if filename == ""{
		fmt.Println(`
 _____  _  _____  _    ____    ___   ___   __   _   _ 
(_   _)( )(_   _)( )  (  __)  /  _) (  _) (  ) ( \ ( )
  | |  | |  | |  | |  | |_    \_"-. | |   /o \ | \\| |
  ( )  ( )  ( )  ( )_ (  _)    __) )( )_ ( __ )( )\\ )
  /_\  /_\  /_\  /___\/____\  /___/ /___\/_\/_\/_\ \_                                               v1.0
`)
		os.Exit(1)
	}

	go scnafile(filename, url)
	for i := 0; i < 10; i++ {
		wg.Add(1)
		go reurl(url)
	}
	wg.Wait()

}

解决(mac版本)

修改linux 最大文件限制数ulimit

ulimit -a

技术图片

> 修改限制
ulimit -n 2048

技术图片

完美解决

俺也不知道咋回事,这玩意还需要字数限制,咋回事咧。我真的不知道啊。
那我就讲个故事吧,从前有一只蚊子,嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡~

golang 错误 too many open files

标签:adl   int   sel   lag   http   lock   pack   any   ror   

原文地址:https://www.cnblogs.com/pickmea/p/14308260.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!