首页 > 其他 > 详细

golang 1.2.1在生产环境中应用应该注意的问题

时间:2014-03-27 20:24:26      阅读:630      评论:0      收藏:0      [点我收藏+]

     golang 1.2.1的GC因为算法的问题,在实际应用过程中,对于长时间运行的damon程序,确实很容易导致内存泄露,有人用cgo来手动管理内存,也有人用pool来管理buffer,这些都很麻烦,还是等1.3发布吧,在 golang 1.2.1中,如果注意一些坑,还是很容易写出稳定运行的程序。

1. 避免递归;

2.在for里面,把一些每次重复的操作提到外面,比如包的init方法中执行, 这些不必多说,比如初始化一个数据库连接,regexp.Compile等;

3. 函数返回,对于slice,struct等比较大的对象,用指针,在for循环里面用完将指针赋值为nil,这一点非常重要;

4.注意一些错误的写法,比如:

func parseFile(file string) string {
 f, err := os.Open(file) 

defer f.Close()
 if err != nil {
  fmt.Println(err)
  //os.Exit(1)
 }

正确的写法是:

func parseFile(file string) string {
 f, err := os.Open(file) 
 if err != nil {
  fmt.Println(err)
  return ""
  //os.Exit(1)
 }else{
  defer f.Close()
 }

这个问题很多初学者容易犯,非常容易导致cpu消耗大,甚至报错;

5. 减少对象的创建,尽量使用数组,struct可用做链表;

6. runtime.GC()没有什么用;

7. 程序写完跑一段时间,用go自带的性能分析工具pprof分析heap,cpu等,尽快发现问题;

8. 运行发现cpu消耗高,内存持续上涨怎么办, 写个程序定时killall,或者crontab执行,再慢慢调优;

 

 

 

 

golang 1.2.1在生产环境中应用应该注意的问题,布布扣,bubuko.com

golang 1.2.1在生产环境中应用应该注意的问题

原文:http://blog.csdn.net/yxw2014/article/details/22283039

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!