Browsed by
分类:未分类

linux systemd

linux systemd

linux使用systemd启动服务。
vi /etc/systemd/system/frps.service

[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini

[Install]
WantedBy=multi-user.target

sudo systemctl restart frps

ubuntu下命令行代理

ubuntu下命令行代理

安装proxychains

  • proxychains安装
git clone https://github.com/rofl0r/proxychains-ng.git
cd proxychains-ng
./configure
make && sudo make install
sudo cp ./src/proxychains.conf /etc/proxychians.conf
cd .. && rm -rf proxychains-ng
  • 编辑proxychains配置
vim /etc/proxychains.conf
socks5 127.0.0.1 1080 //1080改为你自己的端口
  • 使用方法
proxychains4 wget http://xxx.com/xxx.zip

ubuntu安装shadowsocks

用PIP安装很简单

sudo apt-get install python-pip

接着安装shadowsocks

sudo pip install shadowsocks

通过以上命令安装shadowsocks,为了避免权限不够,在命令行前加上sudo

安装shadowsocks

https://my.oschina.net/u/1432769/blog/619651

nginx 调试

nginx 调试

返回http状态码

“`

    location = /test {
     return 403 ;
    }

### 返回状态码和 body
 location = /test {
      default_type text/html ;
      return 200  'test test test ';

}


### 返回json格式
location ^~ /json {
      default_type application/json ;
      return 200  '{"name":"nanjing_wuxu","result":"success"}';
    }

### 返回uri

location ^~ /json {
default_type text/html ;
return 200 $uri;
}
“`

golang log

golang log

golang 自带了log包,使用起来也非常方便,使用方法

package main

import (
    "log"
    "os"
)

func main() {
    log.Println("111111")
    //设置显示文件全名和行号
    log.SetFlags(log.Llongfile)
    log.Println("111111")
    //设置显示短文件名和行号
    log.SetFlags(log.Lshortfile)
    log.Println("111111")
    file, _ := os.Create("test.log")
    log.SetOutput(file)
    log.Println("write to file")

}
php-7.0.2 session_regenerate_id 报错

php-7.0.2 session_regenerate_id 报错

本来打算升级生产服务器的php版本到7.0.2,结果测试发现在使用memcached存储session的时候session_regenerate_id报错。

session_start();
session_regenerate_id(false);

报错信息

Catchable fatal error: session_regenerate_id(): Failed to create(read) session ID: memcached (path: 4f522740705c11e4.m.cnhzaliqshpub001.ocs.aliyuncs.com:11211) in 

由于我们的开发框架是yii2,yii2中是这样调用的

public function regenerateID($deleteOldSession = false)
{
    @session_regenerate_id($deleteOldSession);
}

对,yii2使用了@符号抑制了错误信息,导致我在查找问题的时候花了3个小时逐行调试,因为没报500错误,但是没有什么错误信息,坑啊!

vagrant LNMP环境

vagrant LNMP环境

准备工作

安装好vagrantvirtualbox
下载intvdev1.0.boxVagrantfile,

vagrant box

$ vagrant box list #查看本地已有的box
$ vagrant box add intvdev1.0 /yourdownloadpath/intvdev1.0.box #添加到本地的box列表中
$ vagrant box list #确认已经添加成功

新建工作目录

$ mkdir ~/vagrant_dev
$ cd vagrant_dev
$ cp /yourdownloadpath/Vagrantfile ./ #把之前下载的Vagrantfile拷贝到当前目录
$ vagrant up #启动虚拟机
$ mkdir www #创建web根目录

在www目录下新建一个index.php文件
用浏览器访问http://localhost:8081/index.php来测试

高迸发下性能优化

高迸发下性能优化

hello world

http://rango.swoole.com/archives/508

php性能优化

  • 运行环境
    • php7,比php5快两倍以上
    • opcache
    • php-fpm进程数,根据系统总内存数/单个进程占用的内存数据,单个进程的内存数比较难估
  • io操作优化
    • 使用cache,nosql > db
    • 减少io操作(包括cache),合并多个操作,mget()
    • 外部接口调用需要谨慎,对其性能要评估
    • 异步处理某些操作,比如发短信,发红包等业务。会使用到队里服务,最简单的redis队列或者db模拟队列
    • php不存在代码级别的锁,但要防止io锁操作,比如DB锁(update 同一行)
    • 减少memcache的热点数据,热点数据会导致只使用mc集群中的单台机器,解决方法应该是设置多级缓存,这会带来逻辑上的增长和运维成本的增加

性能测试工具

  • 先单个请求的时间消耗,比如之前100ms,优化后50ms
  • 使用apache ab做并发测试
    ab -c10 -100 http://abc.com/index.php
如何创建一个可以用composer安装的php包

如何创建一个可以用composer安装的php包

composer介绍

关于composer如何安装使用,大家可以到phpcomposer查看文档,这里介绍下如何写个可以使用composer安装的php包

写composer.json

新建一个空目录mkdir libfoo,在libfoo目录下新建一个composer.js文件,内容如下

{
    "name": "gangbo/foo",
    "description": "test description",
    "authors": [
        {
            "name": "gangbo",
            "email": "[email protected]"
        }
    ],
    "autoload": {
         "psr-4": {
            "gangbo\\foo\\": "src/",
            "gangbo\\foo\\test\\": "test/"
         }
    }
}

name 代表这个package的名字,由vendorname/packagename组成。
autoload 里面定义namespace和文件目录的对应关系,可以多个。

编写代码并提交到github

在libfoo/src/目录下新建一个Hello.php

<?php
namespace gangbo\foo;

class Hello
{
    public static function fn()
    {
        echo 'hello: ' . __METHOD__ . "\n";
    }
}

在libfoo/test/目录下新建一个Unit.php

<?php
namespace gangbo\foo\test;
class Unit
{
    public static function fn()
    {
        echo 'hello: ' . __METHOD__ . "\n";
    }
}

提交代码到github,需要提前在github上建好仓库

git init
git add *
git commit -m "init"
git remote add origin [email protected]:gangbo/foo.git
git pull origin master:master
git push origin master:master

提交到packagist

登陆到 packagist ,点击submit把我们的git地址https://packagist.org/packages/submit填写进去并提交。

安装使用

这时其它开发者就可以使用comoser安装你的包了
执行composer require gangbo/foo:dev-master,
这里必须加上dev-master,因为如果不加的话会默认安装该包的稳定版,因为我们这里还没有发布稳定版本。
写个脚本测试下

// test.php
//加载autoload
require __DIR__ . '/vendor/autoload.php';

use gangbo\foo\Hello;
use gangbo\foo\test\Unit;

Hello::fn();
Unit::fn();

执行php test.php 输出结果

hello: gangbo\foo\Hello
hello: gangbo\foo\test\Unit::fn

说明调用成功。

如何安装一个本地的package

修改composer.json文件,添加repositories属性。

{
    "repositories": [
        {
            "type": "path",
            "url": "../../packages/my-package"
        }
    ]
}

修改完后我们就可以在本地执行composer require,composer会从本地文件中做个软连接到vendor目录下。
用这种方式可以非常方便的测试的你的package