Coder Social home page Coder Social logo

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

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

from rdebug.

Comments (11)

rain16881 avatar rain16881 commented on July 26, 2024

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

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

from rdebug.

rain16881 avatar rain16881 commented on July 26, 2024

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

from rdebug.

rain16881 avatar rain16881 commented on July 26, 2024

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

from rdebug.

MingliangT avatar MingliangT commented on July 26, 2024

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

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

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

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

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

from rdebug.

xiaofeitu2 avatar xiaofeitu2 commented on July 26, 2024

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

from rdebug.

testerSunshine avatar testerSunshine commented on July 26, 2024

有几个问题请教下

  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 ([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: 烦请帮忙看下

from rdebug.

727155455 avatar 727155455 commented on July 26, 2024

有几个问题请教下

  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 ([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相关的东西

from rdebug.

kayyellow avatar kayyellow commented on July 26, 2024

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

from rdebug.

727155455 avatar 727155455 commented on July 26, 2024

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

from rdebug.

kayyellow avatar kayyellow commented on July 26, 2024

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

from rdebug.

MingliangT avatar MingliangT commented on July 26, 2024

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

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

from rdebug.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.