主要记录最近遇到的一些开发问题,解决方法。
1. Python 内存分析方法
主要涉及四个工具:
- memory_profile:分析每一行代码的内存使用量
- objgraph:跟踪内存中的对象的关系
- guppy:在运行时跟踪堆的使用情况
- pyrasite:向进程中注入代码
分为两步:
- 模拟线上环境,使用 pyrasite 和 guppy 获取堆信息
- 根据上一步的信息定位到代码中的某一块,再使用 memory_profile 或 objgraph 来进行进一步的分析
2. Docker Machine 基本操作命令
1
| docker-machine create --driver virtualbox my-vm-name
|
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
|
1
2
| docker-machine ssh default
docker@default:~$
|
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
|
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 显著优于其他同类工具。
安装:
编写一个测试用例:
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
|
查看版本信息:
安装 pip
wget https://bootstrap.pypa.io/get-pip.py -O - | python3.7
pip3 -V
9. CentOS 7 升级安装 Git2
- 移除旧版本:
- 安裝 epel-release repository :
1
| yum install epel-release
|
- 安裝 IUS repository:
1
| yum install https://centos7.iuscommunity.org/ius-release.rpm
|
- 安裝 git2u: