到目前为止的故事。我们正在考虑放弃perl。候选者是go或node。我已经把它们都启动并运行了,所以我测试了一些轻量级的负载。然后,我决定强调应用程序。每个框架都能够处理
ab -n 1000 -c 100 http://localhost:8080/
除了go。如果我没有限制连接,那么我会得到错误'too give‘,如果我将连接限制到100,那么ab会给出超时错误并退出。
我的go代码的gist https://gist.github.com/2d8473ce576cab5f7c66。我应该更改什么,才能在加载的情况下使用go服务器?
发布于 2015-03-03 03:31:38
问题看起来像是你用太多的同时连接重载了你的数据库。记住,Go是一种真正的并发语言。
您有没有尝试过将db.SetMaxOpenConns(1000)
设置为一个小得多的数字,比如db.SetMaxOpenConns(10)
或者,您可以限制同时运行的goroutines的数量,如下所示
全局声明这些
const maxAtOnce = 50
var limiter = make(chan struct{}, maxAtOnce)
func init() {
// Fill up with tokens
for i := 0; i < maxAtOnce; i++ {
limiter <- struct{}{}
}
}
在你的getTimeSheet
中,把这个放在开头
// take a token
<-limiter
// give it back on exit
defer func() {
limiter <- struct{}{}
}()
https://stackoverflow.com/questions/28812293
复制相似问题