# 粗略计算内存消耗及服务器资源分配

脚本
// date = 2013-01-20
package main
import (
_ "github.com/go-sql-driver/mysql"
"database/sql"
"fmt"
)
func checkErr(err error) {
if err != nil {
panic(err)
}
}
func getOpenAreaMem(a ,b ,c int) ( map[string]int ) {
// 参数: a -> 100 消耗的内存, b -> 500 消耗的内存, c -> 大于等于1000 消耗的内存;消耗的内存,是根据大量经验数据估算出来的。
// 流程: 依据数据库数据, 获取可用服务器 -> 获取可用服务器上100,500,大于等于1000的区服数量 -> 根据承载分类,并根据数量计算服务器因为open area消耗的内存
// 得到结果形如: 服务器a->消耗内存x
// 服务器b->消耗内存y
result := make(map[string]int)
db, err := sql.Open("mysql","oms:test/nmcDB?charset=utf8")
checkErr(err)
srows, err := db.Query("select serverName from t_serverStatus where allowOpenArea = 'yes' and freePortNum != 'None' and redisIDNum != 'None'")
checkErr(err)
for srows.Next() {
var serverName string
var maxUserCount int
err = srows.Scan(&serverName)
checkErr(err)
result[serverName] = 0
//fmt.Println(serverName)
mrows, err := db.Query("select p.maxUserCount from t_openAreaPlan as p,t_areaInfo as a where mark='1' and concat(p.date,p.time) > date_format(now(),'%Y%m%d%H%i%s') and concat(p.genID,p.areaID)=a.areaName and a.serverName = '"+serverName+"'")
checkErr(err)
for mrows.Next() {
err = mrows.Scan(&maxUserCount)
checkErr(err)
//fmt.Println(serverName,maxUserCount)
if maxUserCount >= 1500 {
result[serverName] += c
} else if maxUserCount >= 500 {
result[serverName] += b
} else if maxUserCount >= 100 {
result[serverName] += a
}
}
}
return result
}
func main() {
ab := getOpenAreaMem(3,5,10)
fmt.Println(ab)
}

最后更新: 2018年10月22日 17:03

原始链接: http://cwiwi.com/2018/10/22/go-function-return-map-type/