rdebug
rdebug copied to clipboard
流量录制,请求后没有php-fpm worker子进程,lsof 没找到加载koala-record.so,session文件夹也没有写入文,koala的debug日志提示说recorded,怎么回事
找问题找到这里了,我也有这个问题,看了一下dockerfile ,在docker上好像是可以生成的,
RUN install_packages apt-utils git vim curl lsof procps ca-certificates sudo locales supervisor && \
chmod 444 /usr/local/var/koala/*so && \
addgroup nobody && \
sed -i -e 's/\s*Defaults\s*secure_path\s*=/# Defaults secure_path=/' /etc/sudoers && \
echo "nobody ALL=NOPASSWD: ALL" >> /etc/sudoers && \
sed -i \
-e "s/pm = ondemand/pm = static/g" \
-e "s/^listen = 9000/listen = \/usr\/local\/var\/run\/php-fpm.sock/g" \
-e "s/^;clear_env = no$/clear_env = no/" \
/opt/bitnami/php/etc/php-fpm.d/www.conf && \
sed -i \
-e "s/user=daemon/user=nobody/g" \
-e "s/^group=daemon/group=nobody/g" \
-e "s/listen.owner=daemon/listen.owner=nobody/g" \
-e "s/listen.group=daemon/listen.group=nobody/g" \
/opt/bitnami/php/etc/common.conf
是不是php-fpm 分配方式一定要是静态的呢?我的环境是动态的,
还有就是'listen.owner' 'listen.group' 为'nobody' , 这些都是与docker环境上有差的,
nginx 上 我也是走sock的。
location ~ [^/]\.php(/|$) {
#fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
在系统上,我的是centos 7.3,docker上大概走的就是ubuntu,
按这个思路一个个排查,折腾一下。
还有个问题就是,在我的开发机上php-fpm是走服务自动启动的,看了一下
录制说明:https://github.com/didi/rdebug/blob/master/doc/recorder/recorder.md
# or, Linux
$ LD_PRELOAD="/usr/local/var/koala/koala-libc.so /usr/lib64/libcurl.so.4" LC_CTYPE="C" KOALA_SO=/usr/local/var/koala/koala-recorder.so KOALA_RECORD_TO_DIR=/usr/local/var/koala /usr/local/sbin/php-fpm
他是在这启动的
然后我把这个写到 '/etc/profile' 中,好像是有点问题
我的配置是这样的
export GOPROXY=https://goproxy.io
export KOALA_SO=/usr/local/var/koala/koala-recorder.so
export KOALA_RECORD_TO_DIR=/usr/local/var/koala
export KOALA_LOG_FILE="/tmp/rdebug/debug.log"
export KOALA_LOG_LEVEL="DEBUG"
export LD_PRELOAD="/usr/local/var/koala/koala-libc.so /usr/lib64/libcurl.so.4"
export LC_CTYPE="C"
#/usr/local/php/sbin/php-fpm
确认'KOALA_RECORD_TO_DIR'可以写
//# Before start php-fpm with koala, export env:
//$ export KOALA_LOG_FILE="/tmp/rdebug/debug.log" KOALA_LOG_LEVEL="DEBUG"
//If everything is ok, but can not find recorded session files. Make sure your KOALA_RECORD_TO_DIR directory can writeable.
我这边能成功 log 与 session 产生文件了 , 解决问题主要就是重新编辑了一下
主要是不放到tmp/编译
step01
koala-libc/build.sh
step02
koala/build-recorder.sh
#!/usr/bin/env bash
set -e
set -x
# /mnt1t/__go__/src/github.com/didi/rdebug
RDEBUG=$(cd ../`dirname $0` && pwd -P)
# record to file, only for testing purpose
export GOPATH=/mnt1t/__go__
export CGO_CFLAGS="-DKOALA_LIBC_NETWORK_HOOK -DKOALA_LIBC_FILE_HOOK"
export CGO_CPPFLAGS="-DKOALA_LIBC_NETWORK_HOOK -DKOALA_LIBC_FILE_HOOK"
export CGO_CXXFLAGS="-std=c++11 -Wno-ignored-attributes"
exec go build -tags="koala_recorder" -buildmode=c-shared -o $RDEBUG/output/libs/koala-recorder.so github.com/didi/rdebug/koala/cmd/recorder
step03
koala/build-replayer.sh
#!/usr/bin/env bash
set -e
set -x
# /mnt1t/__go__/src/github.com/didi/rdebug
RDEBUG=$(cd ../`dirname $0` && pwd -P)
# build replayer by default
export CGO_CFLAGS="-DKOALA_LIBC_NETWORK_HOOK -DKOALA_LIBC_FILE_HOOK -DKOALA_LIBC_TIME_HOOK -DKOALA_LIBC_PATH_HOOK"
export CGO_CPPFLAGS="-DKOALA_LIBC_NETWORK_HOOK -DKOALA_LIBC_FILE_HOOK -DKOALA_LIBC_TIME_HOOK -DKOALA_LIBC_PATH_HOOK"
export CGO_CXXFLAGS="-std=c++11 -Wno-ignored-attributes"
go build -tags="koala_replayer" -buildmode=c-shared -o $RDEBUG/output/libs/koala-replayer.so github.com/didi/rdebug/koala/cmd/replayer
cp $RDEBUG/output/libs/koala-replayer.so $RDEBUG/php/midi/res/replayer/koala-replayer.so
但问题是,开了这东西。我的硬盘感觉被占IO, chrome直接是打不开, 没有细测, 屏蔽/etc/profile 的设置了
”是不是php-fpm 分配方式一定要是静态的呢?我的环境是动态的, 还有就是'listen.owner' 'listen.group' 为'nobody' , 这些都是与docker环境上有差的,“
fpm 的进程管理模式,是静态还是动态,是没有影响的。 其次,listen 的配置以你环境为准,只要保证 fpm 能够正常运行即可。Docker 的配置只是一个示例。
”在我的开发机上php-fpm是走服务自动启动的“
把环境变量 和 启动命令放到一起。而不是通过 /etc/profile 来控制。这样的好处是,可以通过环境变量来随意切换录制和非录制。可以写一个 shell 脚本来控制 fpm 的启停,在 shell 里设置环境变量,这样可以通过修改 shell 脚本来控制是否开启录制;其次在需要重启服务的时候,直接运行脚本即可。
最终是通过重新编译,才可以录制了?(注意,仓库中自带的 so 是 macOS 版本的,其他系统得重新编译。)
supervisor.conf 里改成/opt/bitnami/php/var/run/php-fpm.pid 然后php-fpm的ini 配置里 /run/php-fpm.pid注释打开 ,这样试试.
有几个问题请教下
- 通过教程启动fpm的时候,进程启动了,没报错,我不知道注入成功了没,可以从哪个地方看?
- 如果第一步启动成功了,但是我curl url(两次)之后,session文件夹没出来,nginx的打出来的日志是200,响应结果正常返回
- 我按照三楼的教程设置了打印日志,但是我的/usr/local/var/koala文件夹没有打印出来日志,我怀疑是文件写入无权限,修改文件权限之后,依旧是没有
export KOALA_LOG_FILE="/usr/local/var/koala" KOALA_LOG_LEVEL="DEBUG"
备注: 系统版本
Linux version 3.10.0-862.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Fri Apr 20 16:44:24 UTC 2018
php版本
PHP 7.0.33 (cli)
ps: 烦请帮忙看下
有几个问题请教下
- 通过教程启动fpm的时候,进程启动了,没报错,我不知道注入成功了没,可以从哪个地方看?
![]()
- 如果第一步启动成功了,但是我curl url(两次)之后,session文件夹没出来,nginx的打出来的日志是200,响应结果正常返回
![]()
- 我按照三楼的教程设置了打印日志,但是我的/usr/local/var/koala文件夹没有打印出来日志,我怀疑是文件写入无权限,修改文件权限之后,依旧是没有
export KOALA_LOG_FILE="/usr/local/var/koala" KOALA_LOG_LEVEL="DEBUG"
备注: 系统版本
Linux version 3.10.0-862.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Fri Apr 20 16:44:24 UTC 2018
php版本
PHP 7.0.33 (cli)
ps: 烦请帮忙看下
lsof -p 18277
看是否有 koala相关的东西
@testerSunshine 遇到和你一模一样的问题 - - 请问有找到解决办法吗
1.看下 确保php-fpm的配置中close_env=no 2.确保日志目录有权限 3.check下so是不是自己编译,默认好像是mac的
@727155455 针对1,2:都改过配置了,都排除了。 针对3:用的是docker build 出来的,ok吗? 还有rdebug是否与语言无关,java的demo有吗?
@727155455 针对1,2:都改过配置了,都排除了。 针对3:用的是docker build 出来的,ok吗? 还有rdebug是否与语言无关,java的demo有吗?
现支持 PHP,Java 还没人力跟进