Please enable Javascript to view the contents

开发 Tips(5)

 ·  ☕ 3 分钟

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

1. Python 内存分析方法

主要涉及四个工具:

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

分为两步:

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

2. Docker Machine 基本操作命令

  • 创建 my-vm-name 虚拟机
1
docker-machine create --driver virtualbox my-vm-name
  • 查看全部 docker-machine
1
2
3
4
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
1
2
docker-machine ssh default
docker@default:~$
  • 获取 docke-machine 的宿主机 IP
1
2
docker-machine ip default
192.168.99.101
  • 其他命令
1
docker-machine  [命令] [主机名]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
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 为例:

1
2
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
1
2
3
4
5
docker container run \
  -d \
  -p 127.0.0.1:8080:80 \
  --name nginxname \
  nginx
  • 以 shell 的形式登录到容器
1
docker exec -it containerID bash
  • 查看容器的日志
1
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 显著优于其他同类工具。

安装:

1
pip install locustio

编写一个测试用例:

test.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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

执行测试:

1
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。

以管理员权限执行命令:

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

启动服务 MongoDB:

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

8. CentOS 编译安装 Python 3.7

安装依赖:

1
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

下载源码包:

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

开始安装:

1
2
3
4
tar xzf Python-3.7.0.tgz
cd Python-3.7.0
./configure --enable-optimizations
make altinstall

查看版本信息:

1
python3.7 -V

安装 pip

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

9. CentOS 7 升级安装 Git2

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

微信公众号
作者
微信公众号