× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

Worker进程

  • 仅支持Linux,FreeBSD,MacOS,3类操作系统
  • Linux内核版本2.3.32以上
  • PHP5.3.10以上版本,包括PHP7
  • gcc4.4以上版本或者clang
  • cmake2.4+,编译为libswoole.so作为C/C++库时需要使用cmake

建议使用Ubuntu14/CentOS7或更高版本的操作系统

PHP版本依赖

  • swoole仅支持PHP5.3.10或更高版本,建议使用PHP5.4+
  • swoole不依赖php的stream、sockets、pcntl、posix、sysvmsg等扩展。PHP只需安装最基本的扩展即可

推荐使用的Linux发行版

  • CentOS6.2+
  • Ubuntu12+
  • Debian6+

ARM平台(树莓派Raspberry PI)

  • 请使用swoole-1.7.10或更高版本
  • 使用GCC交叉编译
  • 在编译Swoole时,需要手工修改Makefile去掉-O2编译参数

MIPS平台(OpenWrt路由器)

  • 请使用swoole-1.7.21或更高版本
  • 使用GCC交叉编译

CygWin环境支持(Windows系统)

swoole-1.7.7增加了对cygwin环境的支持,在Windows环境下,可以直接使用cygwin + php 来跑swoole程序。

  • 安装cygwin,并安装gcc、make、autoconf、php 4个包
  • 下载swoole源码,在cygwin-shell中进行phpize/configure/make/make install
  • 修改php.ini,加入swoole.so

cygwin模式下需要对PHP进行简化,去掉不使用的扩展,避免进程占用内存过大,导致Fork操作失败

BashOnWindows

Windows 10系统增加了Linux子系统支持,BashOnWindows环境下也可以使用swoole。安装命令

apt-get install libpcre3 libpcre3-dev php5 php5-dev php5-cli php5-fpm php5-curl php5-mysql php5-intl php5-xmlrpc php5-geoip php5-mysqlnd php5-mcrypt php5-memcached php5-redis php5-tidy php5-sqlite php5-json php5-gmp php5-gd php5-readline php5-imagick
pecl install swoole
echo 'extension=swoole.so' >> /usr/php5/mods-available/swoole.ini
cd /usr/php5/cli/conf.d/ && ln -s ../../mods-available/swoole.ini 20-swoole.ini
cd /usr/php5/fpm/conf.d/ && ln -s ../../mods-available/swoole.ini 20-swoole.ini
  • BashOnWindows环境下必须关闭daemonize选项
  • BashOnWindows环境下不支持服务器,只能使用客户端模式,听说最新的windows 10 预览版可以,未测试。

DockerOnWindows

在Windows下开发的小伙伴可以使用使用Hyper-V+Docker来方便的开发Swoole应用,安装好Docker后再Settings里的 Shared Droves 选项里共享你代码所在磁盘。然后使用如下命令来快速启动Docker容器。

docker run --rm -t -i --name myapp -p 9501:9501 -v e:/path/to:/app:rw xutongle/php:7.1-fpm /bin/bash
  • 其中e:/path/to改成你源码所在路径,/app为容器内路径,在bash里执行你的代码就可以测试了,如 cd /app && php server.php

  • Bingo

    请问一下,执行一段时间后,worker进程内存占用明显提升了

  • selbstkennen梁晨

    看看是否一些静态变量或者数组是否没有释放? 检查下依赖的扩展是否有内存泄露(valgrind)?

  • 图图亚雷

    为什么worker正常退出主进程会重新拉起新的Worker进程?难道Worker进程是manager管理的?

  • 红豆先生

    @图图亚雷 worker进程确实是由manager管理和维护的

  • か

    我也遇到了内存明显提升的问题,包括swoft框架和自己的框架,解决方法是设置ini_set('memory_limit', 'xxx');超过内存后会触发Fatal error,然后worker进程被manger回收后又拉起继续运行。 在定时器中创建携程增长的特别快

    比如下面这个代码放在onWorkerStart中:

    swoole_timer_tick(100,function(){ go(function () { echo (memory_get_usage() / 1024) . "\n"; }); });