记录php5.4与php-redis冲突的解决
最近由于update了ubuntu的源,导致原来新源与本地系统库一些lib冲突,导致系统桌面显示异常,后来只有重装,新安装了php5.4.9,还安装了redis,php-redis扩展,php-redis扩展2,10。但把原来的项目一放上去,就报nginx 502错误(nginx 502错误真是个很头疼的问题)。打开nginx日志查看
[error] 29229#0: *1403 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server:
不知道所云。后来打开php-fpm错误日志,得到的log日志
[08-Oct-2013 21:22:23] WARNING: [pool www] child 12026 exited on signal 11 (SIGSEGV - core dumped) after 5.997917 seconds from start
[08-Oct-2013 21:22:23] NOTICE: [pool www] child 12034 started
可以确定的一点,是php-fpm在一个时间点后重启了一个进程。还是毫无头绪。在网上搜了一大遍,有个有用的跟踪方法。
1、设置php-fpm,只起一个work进程
2、重启php-fpm, 执行ps aux grep php-fpm 得到work进程号pid
3、strace -p pid
下面是我得到的信息
getcwd("/home/www/wms2.xxxx.com", 4096) = 26
lstat("/home/www/wms2.xiaomi.com/./RWebUser.php", 0x7ffff4e30a10) = -1 ENOENT (No such file or directory)
lstat("/home/www/wms2.xiaomi.com/protected/vendor/wms/api/RWebUser.php", 0x7ffff4e30a10) = -1 ENOENT (No such file or directory)
lstat("/home/www/wms2.xiaomi.com/protected/vendor/wms/RWebUser.php", 0x7ffff4e30a10) = -1 ENOENT (No such file or directory)
lstat("/home/www/wms2.xiaomi.com/protected/extensions/log/RWebUser.php", 0x7ffff4e30a10) = -1 ENOENT (No such file or directory)
lstat("/home/www/wms2.xiaomi.com/protected/modules/rights/components/RWebUser.php", {st_mode=S_IFREG0777, st_size=2945, ...}) = 0
lstat("/home/www/wms2.xiaomi.com/protected/modules/rights/components", {st_mode=S_IFDIR0777, st_size=4096, ...}) = 0
lstat("/home/www/wms2.xiaomi.com/protected/modules/rights", {st_mode=S_IFDIR0777, st_size=4096, ...}) = 0
lstat("/home/www/wms2.xiaomi.com/protected/modules", {st_mode=S_IFDIR0777, st_size=4096, ...}) = 0
open("/home/www/wms2.xiaomi.com/protected/modules/rights/components/RWebUser.php", O_RDONLY) = 5
fstat(5, {st_mode=S_IFREG0777, st_size=2945, ...}) = 0
fstat(5, {st_mode=S_IFREG0777, st_size=2945, ...}) = 0
fstat(5, {st_mode=S_IFREG0777, st_size=2945, ...}) = 0
fstat(5, {st_mode=S_IFREG0777, st_size=2945, ...}) = 0
mmap(NULL, 2945, PROT_READ, MAP_SHARED, 5, 0) = 0x7fd9b4804000
mmap(NULL, 266240, PROT_READPROT_WRITE, MAP_PRIVATEMAP_ANONYMOUS, -1, 0) = 0x7fd9b442f000
munmap(0x7fd9b4804000, 2945) = 0
close(5) = 0
getcwd("/home/www/wms2.xxx.com", 4096) = 26
lstat("/home/www/wms2.xxx.com/./XMCCacheHttpSession.php", 0x7ffff4e31060) = -1 ENOENT (No such file or directory)
lstat("/home/www/wms2.xxx.com/protected/vendor/wms/api/XMCCacheHttpSession.php", 0x7ffff4e31060) = -1 ENOENT (No such file or directory)
lstat("/home/www/wms2.xxx.com/protected/vendor/wms/XMCCacheHttpSession.php", 0x7ffff4e31060) = -1 ENOENT (No such file or directory)
lstat("/home/www/wms2.xxx.com/protected/extensions/log/XMCCacheHttpSession.php", 0x7ffff4e31060) = -1 ENOENT (No such file or directory)
lstat("/home/www/wms2.xxx.com/protected/modules/rights/components/XMCCacheHttpSession.php", 0x7ffff4e31060) = -1 ENOENT (No such file or directory)
lstat("/home/www/wms2.xxx.com/protected/modules/rights/XMCCacheHttpSession.php", 0x7ffff4e31060) = -1 ENOENT (No such file or directory)
lstat("/home/www/wms2.xxx.com/protected/components/XMCCacheHttpSession.php", {st_mode=S_IFREG0777, st_size=2612, ...}) = 0
open("/home/www/wms2.xxx.com/protected/components/XMCCacheHttpSession.php", O_RDONLY) = 5
fstat(5, {st_mode=S_IFREG0777, st_size=2612, ...}) = 0
fstat(5, {st_mode=S_IFREG0777, st_size=2612, ...}) = 0
fstat(5, {st_mode=S_IFREG0777, st_size=2612, ...}) = 0
fstat(5, {st_mode=S_IFREG0777, st_size=2612, ...}) = 0
mmap(NULL, 2612, PROT_READ, MAP_SHARED, 5, 0) = 0x7fd9b4804000
munmap(0x7fd9b4804000, 2612) = 0
close(5) = 0
sendto(4, "get 6cacd9674ad21aa083b5032b1a29"..., 39, MSG_DONTWAITMSG_NOSIGNAL, NULL, 0) = 39
recvfrom(4, 0x2806d88, 8196, 64, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=4, events=POLLIN}], 1, 5000) = 1 ([{fd=4, revents=POLLIN}])
recvfrom(4, "VALUE 6cacd9674ad21aa083b5032b1a"..., 8196, MSG_DONTWAIT, NULL, NULL) = 128
lstat("/home/www/wms2.xxx.com/yii/web/CHttpCookie.php", {st_mode=S_IFREG0777, st_size=2772, ...}) = 0
lstat("/home/www/wms2.xxx.com/yii/web", {st_mode=S_IFDIR0777, st_size=4096, ...}) = 0
open("/home/www/wms2.xxx.com/yii/web/CHttpCookie.php", O_RDONLY) = 5
fstat(5, {st_mode=S_IFREG0777, st_size=2772, ...}) = 0
fstat(5, {st_mode=S_IFREG0777, st_size=2772, ...}) = 0
fstat(5, {st_mode=S_IFREG0777, st_size=2772, ...}) = 0
fstat(5, {st_mode=S_IFREG0777, st_size=2772, ...}) = 0
mmap(NULL, 2772, PROT_READ, MAP_SHARED, 5, 0) = 0x7fd9b4804000
munmap(0x7fd9b4804000, 2772) = 0
close(5) = 0
stat("/home/www/wms2.xxx.com/protected/extensions/redis/XMRedis.php", {st_mode=S_IFREG0777, st_size=2672, ...}) = 0
lstat("/home/www/wms2.xxx.com/protected/extensions/redis/XMRedis.php", {st_mode=S_IFREG0777, st_size=2672, ...}) = 0
lstat("/home/www/wms2.xxx.com/protected/extensions/redis", {st_mode=S_IFDIR0777, st_size=4096, ...}) = 0
lstat("/home/www/wms2.xxx.com/protected/extensions", {st_mode=S_IFDIR0777, st_size=4096, ...}) = 0
open("/home/www/wms2.xxx.com/protected/extensions/redis/XMRedis.php", O_RDONLY) = 5
fstat(5, {st_mode=S_IFREG0777, st_size=2672, ...}) = 0
fstat(5, {st_mode=S_IFREG0777, st_size=2672, ...}) = 0
fstat(5, {st_mode=S_IFREG0777, st_size=2672, ...}) = 0
fstat(5, {st_mode=S_IFREG0777, st_size=2672, ...}) = 0
mmap(NULL, 2672, PROT_READ, MAP_SHARED, 5, 0) = 0x7fd9b4804000
munmap(0x7fd9b4804000, 2672) = 0
close(5) = 0
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 5
close(5) = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 5
fcntl(5, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(5, F_SETFL, O_RDWRO_NONBLOCK) = 0
connect(5, {sa_family=AF_INET, sin_port=htons(22122), sin_addr=inet_addr("10.237.36.231")}, 16) = -1 EINPROGRESS (Operation now in progress)
poll([{fd=5, events=POLLINPOLLOUTPOLLERRPOLLHUP}], 1, 3000) = 1 ([{fd=5, revents=POLLOUT}])
getsockopt(5, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
fcntl(5, F_SETFL, O_RDWR) = 0
setsockopt(5, SOL_TCP, TCP_NODELAY, [1], 4) = 0
poll([{fd=5, events=POLLINPOLLPRIPOLLERRPOLLHUP}], 1, 0) = 0 (Timeout)
sendto(5, "*2\r\n$4\r\nAUTH\r\n$9\r\nxm_wms_rs\r\n", 29, MSG_DONTWAIT, NULL, 0) = 29
poll([{fd=5, events=POLLINPOLLPRIPOLLERRPOLLHUP}], 1, 0) = 0 (Timeout)
poll([{fd=5, events=POLLINPOLLERRPOLLHUP}], 1, 3000) = 1 ([{fd=5, revents=POLLIN}])
recvfrom(5, "+OK\r\n", 8192, MSG_DONTWAIT, NULL, NULL) = 5
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
Process 6011 detached
可以看得出,在执行XMRedis后进程6011 就死掉了。基本可以定位是php-redis出了问题。
继续追查最终发现了有段代码问题
public function conn() {
try {
$this->_redis->pconnect($this->host, $this->port, $this->timeout);
// Set client option. must AFTER connected
//var_dump(Redis::OPT_SERIALIZER,Redis::SERIALIZER_PHP);exit();
$this->_redis->setOption(Redis::OPT_SERIALIZER,Redis::SERIALIZER_PHP);
//$this->_redis->setOption(0, 0);
$this->_redis->auth("xm_wms_rs");
$this->connected = true;
} catch (RedisException $e) {
throw new CHttpException(500, "Redis occurs an error:" . $e->getMessage());
}
}
用红色的代码那段,就会报502错误,而用绿色代码这段就没问题。
setOption 这个是个神马东西呢?查了下php-redis api
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_NONE); // don't serialize data 不序列化数据
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP); // use built-in serialize/unserialize 用php内置的序列化
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_IGBINARY); // use igBinary serialize/unserialize 用扩展IGBINARY序列化
$redis->setOption(Redis::OPT_PREFIX, 'myAppName:'); // use custom prefix on all keys redis key前缀
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP); 用此就报502
为什么用php内置的序列化就会出错呢?到底发生了什么?
后来又安装了IGBINARY 扩展,还是不行。最后把php-redis安装了最新的版本2.24,再运行,就完全没问题了。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

숙련된 PHP 개발자라면 이미 그런 일을 해왔다는 느낌을 받을 것입니다. 귀하는 상당한 수의 애플리케이션을 개발하고, 수백만 줄의 코드를 디버깅하고, 여러 스크립트를 수정하여 작업을 수행했습니다.

Docker 환경을 사용할 때 Docker 환경에 Extensions를 설치하기 위해 PECL을 사용하여 오류의 원인 및 솔루션. 종종 일부 두통이 발생합니다 ...

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

CMS는 콘텐츠 관리 시스템을 의미합니다. 사용자가 고급 기술 지식 없이도 디지털 콘텐츠를 생성, 관리 및 수정할 수 있는 소프트웨어 애플리케이션 또는 플랫폼입니다. CMS를 사용하면 사용자가 콘텐츠를 쉽게 생성하고 구성할 수 있습니다.
