目录

    主要记录最近遇到的一些开发问题,解决方法。

    1. Python 内存分析方法

    主要涉及四个工具:

    • memory_profile:分析每一行代码的内存使用量
    • objgraph:跟踪内存中的对象的关系
    • guppy:在运行时跟踪堆的使用情况
    • pyrasite:向进程中注入代码

    分为两步:

    1. 模拟线上环境,使用 pyrasite 和 guppy 获取堆信息
    2. 根据上一步的信息定位到代码中的某一块,再使用 memory_profile 或 objgraph 来进行进一步的分析

    2. Docker Machine 基本操作命令

    • 创建 my-vm-name 虚拟机
    $ docker-machine create --driver virtualbox my-vm-name
    
    • 查看全部 docker-machine
    $ docker-machine ls
    NAME         ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
    default      *        virtualbox   Running   tcp://192.168.99.101:2376           v18.06.1-ce
    my-vm-name   -        virtualbox   Running   tcp://192.168.99.102:2376           v18.06.1-ce
    
    • 登录到 docker-machine
    $ docker-machine ssh default
    docker@default:~$
    
    • 获取 docke-machine 的宿主机 IP
    $ docker-machine ip default
    192.168.99.101
    
    • 其他命令
    $ docker-machine  [命令] [主机名]
    
    active  查看活跃的 Docker 主机
    config  输出连接的配置信息
    create  创建一个 Docker 主机
    env  显示连接到某个主机需要的环境变量
    inspect  输出主机更多信息
    kill  停止某个主机
    regenerate-certs  为某个主机重新生成 TLS 认证信息
    restart  重启主机
    rm  删除某台主机
    ssh  SSH 到主机上执行命令
    scp  在主机之间复制文件
    start  启动一个主机
    stop  停止一个主机
    upgrade  更新主机 Docker 版本为最新
    url  获取主机的 URL
    

    3. 在 Docker Machine 安装软件

    在 Windows 或 OS X 上,使用 Docker 需要借助 VirtualBox 基于 Boot2Docker 镜像创建的虚拟机。Boot2Docker 基于 Tiny Linux,提供 tce-load 管理包工具。

    以安装 Python 为例:

    $ tce-load -wi python
    $ curl https://bootstrap.pypa.io/get-pip.py | sudo python -
    

    可安装软件包列表 tce-load:

    http://distro.ibiblio.org/tinycorelinux/tcz_2x.html

    tce-load 命令的文档:

    http://wiki.tinycorelinux.net/wiki:tce-load

    4. Docker 命令

    • 启动容器,映射端口格式: hostPort:containerPort
    $ docker container run \
      -d \
      -p 127.0.0.1:8080:80 \
      --name nginxname \
      nginx
    
    • 以 shell 的形式登录到容器
    $ docker exec -it containerID bash
    
    • 查看容器的日志
    $ docker logs -f containerID
    

    5. Python 多重继承

    Python 多重继承调用方法时,采用深度优先搜索算法。按顺序从一个父类一直深度搜索,然后再搜索第二个父类,一直到找到方法为止。

    • 旧类

    旧类查找顺序, C(A, B) => C -> A -> B

    • 新类

    新类有一个问题就是,任何多重继承的子类都有一个共同的祖类 Object,都是菱形继承。新类的方法是按照 Class.mro中储存的类的顺序查找的。

    新类查找顺序, C(A, B) => C -> A -> B -> Object

    6. 性能测试 - Locust

    Locust 是开源、使用 Python 开发的性能测试工具。它基于事件、支持分布式,并且提供 Web UI 进行测试执行和结果展示。由于使用的是 gevent 的协程并发机制,在并发量上 Locust 显著优于其他同类工具。

    安装:

    $ pip install locustio
    

    编写一个测试用例:

    test.py

    from locust import HttpLocust, TaskSet, task
    
    
    class TestBaiDu(TaskSet):
    
        @task
        def baidu_page(self):
            self.client.get('/')
    
    
    class WebsiteUser(HttpLocust):
        task_set = TestBaiDu
        min_wait = 3000
        max_wait = 5000
    

    执行测试:

    $ locust -f test.py --host=https://www.baidu.com
    

    Web UI 访问,打开链接: http://localhost:8089/

    7. 如何将 MongoDB 注册为 Windows 服务

    下载安装之后,将目录 C:\Program Files\MongoDB\Server\4.0\bin\ 加入 PATH。

    以管理员权限执行命令:

    $ mongod.exe --config "C:\Program Files\MongoDB\Server\4.0\bin\mongod.cfg" --install  -serviceName "MongoDB" 
    

    启动服务 MongoDB:

    C:\Windows\system32>net start mongodb
    mongodb 服务正在启动 ..
    mongodb 服务已经启动成功。
    

    8. CentOS 编译安装 Python 3.7

    安装依赖:

    $ yum install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils libffi-devel
    

    下载源码包:

    $ cd /usr/src
    $ wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
    

    开始安装:

    $ tar xzf Python-3.7.0.tgz
    $ cd Python-3.7.0
    $ ./configure --enable-optimizations
    $ make altinstall
    

    查看版本信息:

    $ python3.7 -V
    

    安装 pip

    $ wget https://bootstrap.pypa.io/get-pip.py -O - | python3.7 
    $ pip3 -V
    

    9. CentOS 7 升级安装 Git2

    1. 移除旧版本:
    $ yum remove git
    
    1. 安裝 epel-release repository :
    $ yum install epel-release
    
    1. 安裝 IUS repository:
    $ yum install https://centos7.iuscommunity.org/ius-release.rpm 
    
    1. 安裝 git2u:
    $ yum install git2u