Linux下H5开发环境与数据库高效配置实践
|
去年春节那会儿,老张的H5项目卡在Linux环境配置上,大年三十晚上十点给我发消息,说“Nginx反向代理和MySQL连接池调了三天,并发还是上不去”。我叼着烟卷翻他配置文件,第一眼就瞅见PHP-FPM的pm.max_children设成500——这数搁十年前还行,现在SSD+多核的机器,不卡才怪。手套上那块硬掉的胶是上周修打印机蹭的,这会儿捏着鼠标都硌手。 要说Linux下H5开发环境,最坑的就是“默认配置”。我原以为大家早把/etc/sysctl.conf里的net.core.somaxconn调成32768了,结果老张的机器还挂着1024——这数连Apache都喂不饱,更别说Nginx+PHP-FPM这种组合。手机在铁台上震了一下,是运维群在吐槽某云厂商的镜像连ulimit -n都没改,开2000个连接就报“Too many open files”。其实我也没拆到底,有些发行版会把内核参数藏在/etc/security/limits.d/里,得用strace追system call才知道到底卡在哪。 数据库配置更邪乎。老张的MySQL用了InnoDB,但innodb_buffer_pool_size只给4G——现在32G内存的机器遍地走,这数连索引都装不全。我让他改成物理内存的70%,结果他回“那剩下的内存干啥?”我直接把监控截图甩过去:你看,buffer pool命中率从92%蹦到99.8%,QPS涨了40%。旁边有人抖腿,椅子跟着晃,我敲键盘的手都抖了。 不过要说“优胜劣汰”,这环境配置还真有门道。比如PHP-FPM的进程模型,静态分配(static)和动态分配(dynamic)得看机器负载。老张的机器是4核8G,我让他用static,pm.max_children设成20(核心数5),结果并发从800蹦到1500。但这个型号我只在别人那儿见过——有回帮某金融公司调系统,他们用dynamic+pm.max_spare_servers=30,QPS反而更高。这个我说不准,要看运气,可能和业务类型有关:H5页面如果静态资源多,PHP进程少点没事;要是全是动态接口,就得堆进程。
文章配图,仅供参考 车间那台风扇一直在响,嗡嗡的跟老张的抱怨声混一块儿。他说最烦的是“配置改了重启生效,但不知道到底有没有用”。我教他用ab(Apache Benchmark)压测:先跑100并发,看TPS和错误率;再调参数,再跑。有回调MySQL的thread_cache_size,从-1改成16,ab结果没变化,结果用perf top一看,CPU全耗在thread_create上了——这参数在MySQL 8.0里默认是-1(自动调),但老张的机器是5.7,得手动改。中午盒饭里有块姜,辣得我直喝水,手一抖把innodb_log_file_size从256M改成2G,结果MySQL启动不了——忘了ib_logfile0和ib_logfile1得删。修完我自己都没底,怕数据丢了,结果老张说“备份在,怕啥”。其实最反常识的是“配置不是越高越好”。有回帮某电商调系统,他们把Nginx的worker_connections设成65535,结果并发上3000就报“bind() to 0.0.0.0:80 failed (98: Address already in use)”——原来是端口耗尽了。后来查文档发现,Linux的端口范围默认是32768-60999,得用sysctl -w net.ipv4.ip_local_port_range="1024 65535"扩范围。这个我敢打包票,但老张不信,非说“端口怎么可能用完”。结果他自己用netstat -an|wc -l一看,好家伙,28000多个TIME_WAIT——全是短连接闹的。后来让他改TCP参数,把net.ipv4.tcp_tw_reuse和net.ipv4.tcp_tw_recycle(现在废弃了)打开,问题才解决。 老王在旁边修交换机,突然插嘴:“你们说的这些,我早用Ansible自动化了。”我白他一眼:“自动化是省事,但得先知道调哪些参数啊。”他嘿嘿一笑:“所以我先手动调一台,再用Ansible复制到其他机器。”这个思路对,但得防着“配置漂移”——有回某台机器的/etc/my.cnf被运维手动改了,没同步到Ansible的模板里,结果数据库分片数据不一致,查了一周才找到原因。谁把扳手掉地上了一声闷响,老张的鼠标都吓掉了。 现在回头看,“Linux下H5开发环境与数据库高效配置”这玩意儿,说白了就是“知道哪些参数要调,知道怎么调,知道调完怎么验证”。老张后来把配置写成文档,还做了个Checklist,新来的实习生照着改,并发从800涨到2000。但我还是得说,这活儿没头——有回某云厂商更新内核,把net.core.rmem_max的默认值改了,我们得重新调TCP参数;有回PHP升级,opcache的配置项变了,又得重新测。这个我说不准,要看运气,可能明天就出新版本,把现在的“最佳实践”全推翻。 老张现在见我就问:“有没有更省事的办法?”我让他试试Kubernetes,结果他回“那玩意儿更复杂”。我耸耸肩:“复杂是复杂,但至少不用手动改每台机器的配置了。”他撇撇嘴:“等我先把现在的坑填完再说。”车间风扇还在响,我摸了摸手套上的硬胶,心想:这活儿,干到退休都干不完。 (编辑:应用网_常德站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


浙公网安备 33038102330457号