5月 30

golang获取unix time和随机数

比较简单,不做解释。

package main

import(
    "fmt"
    "time"
    "math/rand"
)

func main(){
    //获取unix time
    var a string 
    a = fmt.Sprint(time.Now().UnixNano())
    //获取随机数
    var b string
    ra := rand.New(rand.NewSource(time.Now().UnixNano()))
    b= fmt.Sprint(ra.Intn(10))
    //打印结果
    fmt.Println(a)
    fmt.Println(b)
}

golang获取unix time和随机数

11月 26

php服务器CPU负载过高故障解决

  今天接到问题,服务器跑一段时间总是cpu使用量突然增大,然后就不能连接了。突然增大情况无规律。通过查看平时服务器运行正常,CPU、内存和IO用量都不高,日志报警大致信息如下:
[WARNING] fpm_stdio_child_said(), line 167: child 30951 (pool default) said into stderr:….. [ERROR] fpm_unix_init_child(), line 168:

setrlimit(RLIMIT_NOFILE) failed: Invalid argument (22)”

  通过安装和初步处理人员沟通了解到。现在已经按照日志在网上搜索,按照网上的解决方案进行处理。处理如下

1、提升服务器的文件句柄打开打开
/etc/security/limits.conf : (增加)
* soft nofile 51200
* hard nofile 51200
# vi /etc/security/limits.conf 加上
* soft nofile 51200
* hard nofile 51200
2、提升nginx的进程文件打开数
nginx.conf : worker_rlimit_nofile 51200;
3、修改php-fpm.conf文件,主要需要修改2处。
命令 ulimit -n 查看限制的打开文件数,php-fpm.conf 中的选项rlimit_files 确保和此数值一致。
10240
51200
4、
# vi /etc/sysctl.conf
底部添加
fs.file-max=51200

  “max_requests”为什么是10240,不知道所以然。

  因为其他资源已经占满,或者存在内存泄露等问题,再大量请求时,系统单个任务压力过大导致服务器不稳定。所以经将配置改为“1024”减少最大值重启数量。

  优化并不是单纯的将参数调大,如果这样能解决,那发布版本时直接都改为最大就好了。也不能按照网上的解决方案照搬方法。所以在解决过程中,要参考学习,也要搞清原理,按照当前环境适当调整。通过调整,服务器已经稳定运行3个月,没有再次出现问题。

9月 12

golang 批量检查页面

  在学习go语言,所以当前的需求使用go来试验一下。需要:循环检查某些url并返值,并获取所用时间,如果返回内容长度超过100个字节,只显示前100个字节,不足100个字节显示全部。我将url写在url.txt文件中,方便以后增加。
  在centos 5.4下go1.0.2编译通过。虽然编译通过,但是个人感觉还是不如python方便,并且变异出来的东西都快3M了,让我想起了当年的delphi。如果这种监测实验脚本还是首选python。但是用python做有个问题,如果使用“while 1”循环使用urllib2获取,时间一长就失败过多。具体原因没有查,直接用crontab或脚本调用解决。

package main

import ("fmt"
        "os"
        "net/http"
        "io/ioutil"
        "time"
        )

func main() {
        var str string
        userFile := "url.txt"
        fin,err := os.Open(userFile)
        defer fin.Close()
        if err != nil {
                fmt.Println(userFile,err)
                return
        }
        buf := make([]byte, 1)
        //
        for{
            n,_:= fin.Read(buf)
            if 0==n {break}
            if string(buf)=="\n"{
               //开始通过url获得页面
               starttime:=time.Now().Unix()
               res, err := http.Get(str)
               endtime:=time.Now().Unix()
               usetime:=endtime-starttime
               if err != nil {
                   fmt.Println(err)
               } 
               context, err := ioutil.ReadAll(res.Body)
               if err != nil {
                   fmt.Println(err)
               }
               res.Body.Close()
               // 获得完毕打印
               if len(context) >100{
                     fmt.Println(string(context)[:100])
               } else {
                     fmt.Println(string(context))
               }
               fmt.Println("get url:", str, " use time :", usetime)
               str=""
            } else {
                str+=string(buf)
              }
        }
}