LOADING

2019年4月

今天在压测接口时发现一个接口总是报Failed requests,看log发现请求成功了,最终发现问题的原因是因为
接口里面有随机从数据库中提取数据,导致的长度不一致,不用理会即可,如果还想测就暂时把随机取数据关闭

Failed requests:        132
   (Connect: 0, Receive: 0, Length: 132, Exceptions: 0)

测试时出现的Failed requests原因分析:
Failed requests: 2303
(Connect: 0, Length: 2303, Exceptions: 0)
只要出现Failed requests就会多一行数据来统计失败的原因,分别有Connect、Length、Exceptions。
Connect 无法送出要求、目标主机连接失败、要求的过程中被中断。
Length 响应的内容长度不一致 ( 以 Content-Length 头值为判断依据 )。
Exception 发生无法预期的错误。

今天在业务中用ab进行压力测试,但是我发现400 400 的请求永远超过三秒,于是我在public/index.php直接echo 1;die;并且从0开始测试laravel框架的并发如何,我现在是用nginx laravel 5.6,从本地ab测试服务器 配置后续补上QQ截图20190419115847.png

首先是1 1
![$%_G]NVOR~`(~{5ONA_I%Q.png

10 10
QQ截图20190419115847.png

100 100
QQ截图20190419120222.png

200 200
QQ截图20190419120334.png

220 220
QQ截图20190419120533.png

300 300
QQ截图20190419143923.png

事实证明laravel也就200并发,上不去300如果不优化肯定是3秒开外了

array_multisort(array_column($redis,'praise_num'),SORT_DESC,$redis);

以redis中的praise_num 倒序排列

array_search($user_homework_id,array_column($redis,'id'));

查找user_homework_id 在redis中的key

1.修改laravel配置文件. configapp.php

   'log'=>'daily'

2.在项目目录中composer命令安装扩展:composer require arcanedev/log-viewer

3.安装成功后,需要在configapp.php 的providers阵列中注册服务

     Arcanedev\LogViewer\LogViewerServiceProvider::class

此时可以直接访问 http:://域名/log-viewer

需要改变route或者语言可以在log-viewer中的config配置

php artisan log-viewer:publish :运行此命令发布配置和翻译文件

git地址:https://github.com/ARCANEDEV/LogViewer/blob/master/_docs/1.Installation-and-Setup.md

需要注意 安装几个依赖, 最新版本互相可能不兼容, 选择最合适的就好

大日志会导致内存溢出, 建议小项目用

LaravelModel 关联操作 测试
student_homeworks数据条数:96944
student_hear_records数据条数:32574
原生执行时间:4.36

DB::select('select * from `tbl_student_homeworks` as a  left join `tbl_student_hear_records`as b ON
`a`.id = `b`.student_homework_id where a.task_id = 0 ');

Laravel封装的join执行时间:8.11

 $discovery_count = DB::table('student_homeworks')
->leftJoin('student_hear_records','student_homeworks.id','=','student_hear_records.student_homework_id')
                        ->where('student_homeworks.task_id',0)
                        ->get();

Laravel封装的Model with写法执行时间:25.64

$discovery_count = StudentHomework::where('task_id',0)
                   ->with('hasStudentHearRecords')
                   ->get();

model中:

 public function hasStudentHearRecords(){
        return $this->hasMany('App\StudentHearRecords','student_homework_id','id');
    }

事实告诉我们 当用到join时尽量不要用Model的with方法,因为这真是我见过所有框架里做的最差得了

select IFNULL(real_name,nickname),COUNT(*) from tbl_invites  JOIN tbl_teachers on tbl_invites.from_teacher_id = tbl_teachers.id GROUP BY from_teacher_id;