无题

  • laravel-后台API token管理、用户管理、权限管理、操作日志、文章管理、分类管理
  • vue后台模板(使用已开源的)
  • socket、swoole、easyswoole
  • phpmywind改造成自适应的(html-php混编)
  • mysql-数据优化、索引优化、事务、锁机制
  • redis 队列等场景使用
  • python 爬数据
  • go

todo-list

  • mac多php、mysql、nginx、apache版本安装
  • thinkpad共享文件夹-mac映射共享文件夹
  • vscode远程编辑配置
  • laravel-admin 参考 部署 moell-peng/mojito
  • easyswoole-长连接认证-laravel的各种认证对比

问题

  • 如何查看(设置)PHP当前启动了多少个进程、线程、协程

linux参数调优之swoole

连接数优化、系统内核调优

ulimit -n 文件最大打开数 单个进程能支持最大的 fd 取决于 ulimit -n 的值 参考资料

net.ipv4.tcp_mem  =   379008       505344  758016 
net.ipv4.tcp_wmem = 4096        16384   4194304
net.ipv4.tcp_rmem = 4096          87380   4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

sysctl -a 查看全部参数
sysctl -N [参数] 参数是否存在
sysctl -n [参数] 查看参数的值
sysctl -w arg=value # -w arg=value arg表示内核参数,value表示设置值。给内核参数临时设置一个值

net.ipv4.tcp_mem

#确定 TCP 栈应该如何反映内存使用;每个值的单位都是内存页(通常是 4KB)
#第一个值是内存使用的下限
#第二个值是内存压力模式开始对缓冲区使用应用压力的上限
#第三个值是内存上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的 BDP 可以增大这些值(但是要记住,其单位是内存页,而不是字节)

net.ipv4.tcp_rmem

#与 tcp_wmem 类似,不过它表示的是为自动调优所使用的接收缓冲区的值

net.ipv4.tcp_wmem = 30000000 30000000 30000000

#为自动调优定义每个 socket 使用的内存。
#第一个值是为 socket 的发送缓冲区分配的最少字节数
#第二个值是默认值(该值会被 wmem_default 覆盖),缓冲区在系统负载不重的情况下可以增长到这个值
#第三个值是发送缓冲区空间的最大字节数(该值会被 wmem_max 覆盖)

net.core.wmem_default = 11059200

#定义默认的发送窗口大小;对于更大的 BDP 来说,这个大小也应该更大

net.core.rmem_default = 10000000

#指定了接收套接字缓冲区大小的缺省值(以字节为单位)

net.core.rmem_max = 10000000

#指定了接收套接字缓冲区大小的最大值(以字节为单位)

net.core.wmem_max = 11059200

#定义发送窗口的最大大小;对于更大的 BDP 来说,这个大小也应该更大

net.ipv4.tcp_tw_reuse 在Ubuntu中这个参数值是0(r73)

是否socket reuse,此函数的作用是Server重启时可以快速重新使用监听的端口。如果没有设置此参数,会导致server重启时发生端口未及时释放而启动失败
表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭

net.ipv4.tcp_tw_recycle 在Ubuntu中没有发现这个参数(r73)

使用socket快速回收,短连接Server需要开启此参数。此参数表示开启TCP连接中TIME-WAIT sockets的快速回收,Linux系统中默认为0,表示关闭。打开此参数可能会造成NAT用户连接不稳定,请谨慎测试后再开启。
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭

相关资料

内核参数调整之swoole
内核参数调整之easy-swoole
TCP/IP及内核参数优化调优
linux系统怎么查看及设置内核参数

tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项

windows-注册表修改

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon #

选中Winlogon项,在其上点击右键,选择“新建 – 项”,然后把新建的项命名为SpecialAccounts。选中新建的SpecialAccounts项,按同样的方法在其下新建一个名为UserList的项
新建 – DWORD(32位)值 全名 登录界面隐藏用户

参考资料

连接池

MySQL连接池、Redis连接池 连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个.
每次建立数据库连接都需要发生TCP/IP握手, 并且发生I/O. 通过建立连接池增加复用性.  

相关资料

数据库连接池学习笔记

JMeter-开启端口线程

JMeter线程、端口限制

windows-端口查看排查

netstat -an  显示出电脑中所有被打开的端口列表

netstat -ano  显示出所有占用端口的列表

netstat -ano | findstr “80”  显示出80端口占用的详细情况

tasklist | findstr “680”    查询端口具体哪个应用占用


Windows提供给TCP/IP连接的端口为1024-5000,并且要四分钟来循环回收他们。就导致我们在短时间内跑大量的请求时将端口占满了。

  1. cmd中,用regedit打开注册表
  2. 在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下
         1)右击parameters,添加一个新的DWORD,名字为MaxUserPort
         2)然后双击MaxUserPort,输入数值数据为65534,基数选择十进制。(目前windows10-查看到的值是2710(十六进制) 转十进制后就是 10000)
  3. 然后重启电脑!重启电脑!重启电脑!

相关资料

jmeter 运行脚本报错 java.net.BindException: Address already in use
Jmeter工具做性能测试 常见的错误汇总

MySQL并发连接数

MySQL-同时申请链接数, 在MySQL的源码中,默认最大的连接数是16384

异常: SQLSTATE[08004] [1040] Too many connections 当前超出了数据库设置的最大连接数

show variables like '%max_connections%'; 最大连接

相关资料

MySQL连接处理方式及最佳并发连接数设置
mysql连接数
MySQL中too many connections超出最大连接数的处理方法
数据库中间件mysql-proxy细节
mysql服务器最大连接数怎么设置才合理

MySQL-批量入库优化

MySQL批量入库的方式

循环一条一条入库

批量入库

通过程序组合 insert into (字段) tbl vlaues(), vlaues(), vlaues(),...

事务入库

        $autoCommit = (isset($this->startTransaction) ? !$this->startTransaction : true);
        $ids = array();
        if ($autoCommit) {
            $this->startTransaction();
        }
        foreach ($multiInsertData as $insertData) {
            if ($dataKeys !== null) {
                // apply column-names if given, else assume they're already given in the data
                $insertData = array_combine($dataKeys, $insertData);
            }
            $id = $this->insert($tableName, $insertData);
            if (!$id) {
                if ($autoCommit) {
                    $this->rollback();
                }
                return false;
            }
            $ids[] = $id;
        }
        if ($autoCommit) {
            $this->commit();
        }

使用 LOAD DATA INFILE 文件导入

Tip: 通过PHP程序处理好对应格式的内容生成文件, 然后放到数据库服务器中导入操作.

imagecode.txt

http://www.qyule01.fun/media/videos/tmb/000/005/451/1.jpg###100000
http://pic.rmb.bdstatic.com/81923c4cd60b8731b09cc55a0ee82cb8.jpeg###100000
http://pcookie.cnzz.com/app.gif?&cna=Q/1fFKG8SggCAXRVIh2iBCTo###100000
http://inews.gtimg.com/newsapp_ls/0/6134659193_150120/0###100000

load data local infile'/Users/home/xx/temp/xxyun/imagecode.txt'into table imagecode fields terminated by'###'lines terminated by'\n'(url,code);

测试数据

vbox-ubuntu-16.04 2G2核

// 写入一个文件-本地vbox服务器 run time total :0.47590112686157

// 本地vbox服务器-耗费时间: run time total :46.867498874664
// 本地vbox服务器-去除rand函数: run time total :48.011456012726
// 本地vbox服务器-去除var_dump函数: run time total :0.12039113044739
// 本地vbox服务器-使用insertMulti函数 : run time total :43.925640106201

// 内网服务器-耗费时间: run time total :42.424664020538

相关资料

MySQL-关于load data local-详细文档

–secure-file-priv选项问题的解决方法 # show global variables like '%secure_file_priv%';

  • secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。
  • secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行。
  • secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出。

MySQL LOAD DATA INFILE – 加载没有主键的文件实战