追加功能 #503
Updated by Zhongbao Ye 2 months ago
*Background*
# OTS4.0屡次系统奔溃
*具体问题*
* 1. *PHP GD库save*
问题:OOM
原因:可能GD库函数,exif_read_data等,读取大文件,也会导致内存枯竭。
处置:正确使用库函数,并保证图片文件不要太大。
备注:由于第一时间没有完全彻底调查原因,可能遗漏了部分【可能性】。
* 2. *PHP Upload Files*
问题:OOM
原因:AWS Liuux 2023默认tmpfs(内存文件系统),上传文件过大,导致内存枯竭(默认配置内存不足)。
处置:自定义默认上传文件物理路劲(比如:/var/www/html/storage/upload/tmp),避免使用tmpfs。
备注:AWS 从 Amazon Linux 2023 开始 /tmp 默认是挂载为 tmpfs(内存文件系统)。相比之前的 Amazon Linux 2 和更早版本,AL2023 是第一个默认把 /tmp 放到 tmpfs 上的 AWS Linux 版本。
* 3. *PHP CSV下载*
问题:OOM
原因:程序读取数据表全量数据放入php变量,在加之在使用一些php函数比如array_merge时,导致内存撑爆
处置:分割读取: 一边读取一边写入数据到CSV文件,限制读取内容,避免使用数组存储大数据进行数据的copy或者合并等操作。 处置:一边读取一边写入数据到CSV文件,避免使用数组存储大数据进行数据的capy或者合并等操作。
备注:后续其他导入/导出/脚本批处理等操作时,应该使用分割读取保证固定内存
*共通措施*
* 1. *Memorty使用Usage*:ps aux --sort=-%mem | head
如果2GB的内存,mysql等占用内存偏高(%31.5, 600-700MB),我们可能需要【措施:降低内存消耗比例】。
- 比如限制使用【Select *】。
- 其他:比如添加监测
<pre>
ots4.0整体Mysql内存消耗(基本都在35%以上)都过大(SBX都没有这么高的比例:基本都在1%)。
能否在DB class的query函数内,统一添加查询结果的字节数(内存变量) > 10MB, error.log提示监测呢?
参考代码:仅仅参考,注意SQL结果可能null
/** ================== 内存监测 BEGIN ================== */
$bytes = strlen(serialize($result->rows));
$limit = 10 * 1024 * 1024; // 10MB
if ($bytes > $limit) {
error_log(
'[DB QUERY LARGE RESULT] ' .
'Size: ' . round($bytes / 1024 / 1024, 2) . 'MB | ' .
'Rows: ' . $result->num_rows . ' | ' .
'SQL: ' . $sql
);
}
/** ================== 内存监测 END ================== */
</pre>
* 2. *其他措施*:提高EC2配置 或者 添加 SWAP,防止 OOM Kill。
*v4 coding standard:*
# Git提交
#xxx(redmine number): xxx(redmine title) - xxx(任意:补充内容)
# 代码规范
2.1: 结构:Public -> Protected -> Private
2.2: 其他代码规范同SBX
# MVCL的v3/v4物理分割
3.1: v3/v4的代码分为两个文件,比如: order.php, order_v3.php
3.2: system也分为两个文件,暂时只有一个user_v3
- Note: front的$this->user在v4中会替换为$this->customer, 即v4中需要清除$this->user
3.3: 代码中,区分v3/v4的调用,比如:new User_V3
# 前台代码
twig, js, css (js, css尽量写在单独的css文件中)
# 后台代码
MVCL (L:en,cn)
# 注释
## 类名:
<pre>
/**
* xxx
*
* @copyright RedBlue-OTS 2024
* @version v4
*
*/
</pre>
## 函数名:参数类型 + 返回值类型
<pre>
/**
* xxx
*
* @param xxx $xxx
* @param xxx $xxx
* @return xxx
*/
</pre>
*Output*
* Report and Solution
*Others*