部署时遇到的常见问题

data文件夹无法写入(框架配置_of.dataDir指向的文件夹)

可以尝试 "chmod -R 777 data", "chown -R 用户 data", "chgrp -R 用户组 data" 来解决问题

如何看到mysql死锁日志

mysql 帐号分配 ROCESS 权限后, 框架会抓取死锁日志

为什么通过 curl 或 of_base_com_net::request 访问网络慢

在网络正常的情况可能是IP6的问题, 在 /etc/resolv.conf 加上 options single-request-reopen 参数

如何禁止浏览器的内存(from memory cache)与磁盘(rom disk cache)缓存

apache 配置方法
#开启 mod_headers 模块
LoadModule headers_module modules/mod_headers.so

#禁止css与js文件浏览器缓存
<FilesMatch "\.(css|js)(.*)$">
    header set Cache-Control "max-age=0, no-cache"
</FilesMatch>
Nginx 配置方法
server {
    #其它配置
    ...

    #禁止css与js文件浏览器缓存
    location ~* \.(css|js)(.*)$ {
        #其它配置
        root ...

        add_header Cache-Control "max-age=0, no-cache";
    }
}

如何解决异步起不来或很快停止的问题

一, 生产环境建议: 配置php环境变量关闭安全模式且启用popen方法, 注意版本号对应
of_base_com_net::isCli();     //返回 true 则设置成功
二, Apache开发环境建议: httpd.conf配置足够长的超时时间
FcgidIOTimeout 864000
FcgidBusyTimeout 864000

如何排查异步代码卡死问题

一, 设置"脚本超时"排查代码死循环, 超时后错误日志中会提示代码位置
set_time_limit(60);
二, 为网络请求函数设置"响应超时"排查网络异常, "脚本超时"对"响应超时"无效
//不包含CURL的响应超时
ini_set('default_socket_timeout', 60);

//CURL 响应超时(60s)
curl_setopt($ch, CURLOPT_TIMEOUT, 60);

//file_get_contents 响应超时(60s)
file_get_contents(URL, false, stream_context_create(array(
    'http' => array(
        'timeout' => 60
    )
)));

//推荐 of_base_com_net::request 默认default_socket_timeout超时设置
of_base_com_net::request(URL);
三, 上述无效时, 添加"调试代码", 记录每个节点位置, 再分析排查
linux 查看异步进程 printf '%b\n\n' $(ps aux --sort -rss | grep \\.php | sed 's/ /%20/g;s/%/\\x/g')

如何提升系统性能

  1. 配置多个系统副本, OF_DATA目录共享, 配置 "_of.nodeName" 区分不同副本
  2. 将所有 kv 配置成非files模式, 如redis分布式模式, 注意 default 和 _ofSelf 有默认配置
  3. 切换数据锁, 如切到swooleRedis 配置_of.com.data.lock 挂载多个磁盘
  4. 使用分布式数据库, 如TIDB
  5. 消息队列使用非MySQL方式, 如redis方式
  6. 减少不必要 SESSION 生成, 如serv层的API, 可以通过 _of.session.autoStart 配置
  7. SESSION切到非files模式, 如kv(依赖数据锁)或db(不依赖磁盘), 最好用cookie绑定将files分布式独立存储
  8. 动态计划任务切换到db模式, 配置_of.com.timer.task
40000
lock single local: 0.4s
lock single minio-goofys: 20.91s
lock single cephfs: 17.74s
lock single nfs-memory: 25.87s
lock single nfs-disk: 22.35s
lock single redis-RDB+AOF: 16.44s
lock single redis-none: 16.29s

40000
lock rand local: 5.09s
lock rand minio-goofys: 345.47s
lock rand cephfs: 37.57s
lock rand nfs-memory: 167.46s
lock rand nfs-disk: 27.59s
lock rand redis-RDB+AOF: 40.48s
lock rand redis-none: 8.15s

10000
write single local: 0.79s
write single minio-goofys: 93.62s
write single cephfs: 46.25s
write single nfs-memory: 27.63s
write single nfs-disk: 8.85s

100000
read single local: 0.87s
read single minio-goofys: 38.35s
read single cephfs: 1.16s
read single nfs-memory: 3.27s
read single nfs-disk: 2.89s

40000
delete batch local: 0.43s
delete batch minio-goofys: 60.02s
delete batch cephfs: 25.51s
delete batch nfs-memory: 14.73s
delete batch nfs-disk: 13.4s