Skip to content

Commit 5797d76

Browse files
committed
python内存泄露排查和修复
1 parent 9052b01 commit 5797d76

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

codingstyle/codingstyle.rst

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ python2 编码问题:
308308

309309
ORM和数据库相关:
310310

311-
- 遵守互联网公司数据库设计规范。网上很多开源的规范可以参考,结合自己公司制定规范(很多中小公司一开始没DBA,建表很乱,没有规范/注释,各种外键/NULL值很多坑)。如果一开始数据库搞得比较糙,后来无论优化还是拆分都会有很多坑。
311+
- 遵守互联网公司数据库设计规范。网上很多开源的规范可以参考,结合自己公司制定规范(很多中小公司一开始没DBA,建表很乱,没有规范/注释,各种外键/NULL值很多坑,后期修改成本比较高)。如果一开始数据库搞得比较糙,后来无论优化还是拆分都会有很多坑。
312312
- 数据库这一层的接口考虑下参数过滤,防止不恰当参数可能导致的慢查询。动态语言要注意变量类型和数据库字段类型不一致导致的查询索引失效。
313313
- 优先使用ORM,相比sql语句更加容易维护,同时避免了sql注入。Sqlalchemy只有你想不到,没有它做不到。
314314
- 获取对象的时候尽量传入需要的字段(数据表列),减少数据传输同时还能避免拼对象的时间消耗,python构建对象比较耗时。
@@ -325,6 +325,14 @@ Web 框架相关:
325325
- 推荐使用 Django/Tornado 统一管理路由配置的方式,而不是使用 Flask 装饰器路由的方式,方便统一查询和管理。
326326

327327

328+
内存泄露问题和排查:
329+
330+
- 谨慎使用生存周期过长的全局对象。之前出现过不断append 一个全局 list 导致的内存泄露情况,很难判断销毁时机。
331+
- 如果涉及到循环引用,使用弱引用 weakref
332+
333+
* `《使用gc、objgraph干掉python内存泄露与循环引用》 <https://www.cnblogs.com/xybaby/p/7491656.html>`_
334+
335+
328336
序列化问题:
329337

330338
- 跨语言 rpc 或者序列化成 json 返回给前端数据,注意 int64 类型(比如发号器发的id)转成 string(grpc会自动处理)。长整型会被js截断,很多新手可能会忘记这种跨语言序列化的坑。

0 commit comments

Comments
 (0)