Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

流量录制,请求后没有php-fpm worker子进程,lsof 没找到加载koala-record.so,session文件夹也没有写入文,koala的debug日志提示说recorded,怎么回事 #15

Open
xiaofeitu2 opened this issue May 23, 2019 · 11 comments

Comments

@xiaofeitu2
Copy link

No description provided.

@rain16881
Copy link

rain16881 commented Jun 10, 2019

找问题找到这里了,我也有这个问题,看了一下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,

按这个思路一个个排查,折腾一下。

@rain16881
Copy link

rain16881 commented Jun 10, 2019

还有个问题就是,在我的开发机上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.

@rain16881
Copy link

我这边能成功 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 的设置了

@MingliangT
Copy link
Member

MingliangT commented Jun 11, 2019

”是不是php-fpm 分配方式一定要是静态的呢?我的环境是动态的,
还有就是'listen.owner' 'listen.group' 为'nobody' , 这些都是与docker环境上有差的,“

fpm 的进程管理模式,是静态还是动态,是没有影响的。
其次,listen 的配置以你环境为准,只要保证 fpm 能够正常运行即可。Docker 的配置只是一个示例。

”在我的开发机上php-fpm是走服务自动启动的“

把环境变量 和 启动命令放到一起。而不是通过 /etc/profile 来控制。这样的好处是,可以通过环境变量来随意切换录制和非录制。可以写一个 shell 脚本来控制 fpm 的启停,在 shell 里设置环境变量,这样可以通过修改 shell 脚本来控制是否开启录制;其次在需要重启服务的时候,直接运行脚本即可。

最终是通过重新编译,才可以录制了?(注意,仓库中自带的 so 是 macOS 版本的,其他系统得重新编译。)

@xiaofeitu2
Copy link
Author

supervisor.conf 里改成/opt/bitnami/php/var/run/php-fpm.pid
然后php-fpm的ini 配置里 /run/php-fpm.pid注释打开 ,这样试试.

@testerSunshine
Copy link

testerSunshine commented Jul 25, 2019

有几个问题请教下

  1. 通过教程启动fpm的时候,进程启动了,没报错,我不知道注入成功了没,可以从哪个地方看?
    image
  2. 如果第一步启动成功了,但是我curl url(两次)之后,session文件夹没出来,nginx的打出来的日志是200,响应结果正常返回
    image
  3. 我按照三楼的教程设置了打印日志,但是我的/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 (builder@kbuilder.dev.centos.org) (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: 烦请帮忙看下

@727155455
Copy link
Contributor

727155455 commented Aug 12, 2019

有几个问题请教下

  1. 通过教程启动fpm的时候,进程启动了,没报错,我不知道注入成功了没,可以从哪个地方看?
    image
  2. 如果第一步启动成功了,但是我curl url(两次)之后,session文件夹没出来,nginx的打出来的日志是200,响应结果正常返回
    image
  3. 我按照三楼的教程设置了打印日志,但是我的/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 (builder@kbuilder.dev.centos.org) (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相关的东西

@kayyellow
Copy link

kayyellow commented Aug 21, 2019

@testerSunshine 遇到和你一模一样的问题 - - 请问有找到解决办法吗

@727155455
Copy link
Contributor

1.看下 确保php-fpm的配置中close_env=no
2.确保日志目录有权限
3.check下so是不是自己编译,默认好像是mac的

@kayyellow
Copy link

@727155455 针对1,2:都改过配置了,都排除了。 针对3:用的是docker build 出来的,ok吗?
还有rdebug是否与语言无关,java的demo有吗?

@MingliangT
Copy link
Member

@727155455 针对1,2:都改过配置了,都排除了。 针对3:用的是docker build 出来的,ok吗?
还有rdebug是否与语言无关,java的demo有吗?

现支持 PHP,Java 还没人力跟进

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants