登录
首页 >  Golang >  Go问答

服务请求被拒绝,资源不足

来源:stackoverflow

时间:2024-03-10 22:42:28 444浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《服务请求被拒绝,资源不足》,聊聊,我们一起来看看吧!

问题内容

在我的项目中,有一个函数来迭代项目列表,然后为每个项目调用一个函数来发出 get 请求来检索一些参数。当我们使用 checkmarx 进行扫描时,它指向 resp, err := http.get(url) 并显示

获取分配的资源在被其他函数使用时容易出现资源耗尽

下面是 getparams() 函数。该函数是否存在潜在的资源耗尽?

func getParams() (float64, float64, error) {
    url := "http://url.to.get.response"
    // the resource allocated below is prone to resource exhaustion?
    resp, err := http.Get(url)
    if err != nil {
        log.Error(err.Error(), err)
        return -1.0, -1.0, err
    }
    defer resp.Body.Close()

    var result map[string]interface{}
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Error(err.Error(), err)
    }

    json.Unmarshal(body, &result)

    if routes, ok := result["routes"].([]interface{}); ok {
        route := routes[0].(map[string]interface{})
        summary := route["summary"].(map[string]interface{})
        secs := summary["seconds"]
        meters := summary["meters"].(float64)
        var mins float64
        if etai, ok := secs.(float64); ok {
            mins = etai / 60
        } else {
            mins = 0
        }
        return mins, meters, nil
    }

    return -1.0, -1.0, nil
}

正确答案


循环顶部是否有上限,换句话说,如果列表有 10M 个元素,代码是否会尝试发送 10M 个请求?

请记住,Web 请求使用随机源端口进行会话,并且数量有限,建立连接也受内存分配的影响,这也是您可能需要考虑的限制因素。最重要的是,操作系统可以对同时活动的“描述符”的数量有自己的限制。

不确定这是否是错误想要告诉您的内容,这只是我的最佳猜测。如果是这样,您可能需要在代码中引入一些同步,以便一次仅建立 n 个连接。

好了,本文到此结束,带大家了解了《服务请求被拒绝,资源不足》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>