• gearman参数说明


    -b, –backlog=BACKLOG 连接请求队列的最大值
    -d, –daemon Daemon 守护进程化
    -f, –file-descriptors=FDS 可打开的文件描述符数量
    -h, –help
    -l, –log-file=FILE Log 日志文件
    -L, –listen=ADDRESS 开启监听的地址
    -p, –port=PORT 开启监听的端口
    -P, –pid-file=FILE File pid file
    -r,–protocol=PROTOCOL 使用的协议
    -q, –queue-type=QUEUE 持久化队列类型
    -t, –threads=THREADS I/O线程数量
    -u, –user=USER 进程的有效用户名
    libdrizzle Options:
    --libdrizzle-host=HOST Host of server.
    --libdrizzle-port=PORT Port of server.
    --libdrizzle-uds=UDS Unix domain socket for server.
    --libdrizzle-user=USER User name for authentication.
    --libdrizzle-password=PASSWORD Password for authentication.
    --libdrizzle-db=DB Database to use.
    --libdrizzle-table=TABLE Table to use.
    --libdrizzle-mysql Use MySQL protocol.
    libmemcached Options:
    --libmemcached-servers=SERVER_LIST List of Memcached servers to use.
    libsqlite3 Options:
    --libsqlite3-db=DB Database file to use.
    --libsqlite3-table=TABLE Table to use.
    libpq Options:
    --libpq-conninfo=STRING PostgreSQL connection information string.
    --libpq-table=TABLE Table to use.
    http Options:
    --http-port=PORT Port to listen on.

     gearman说明:

      后台作业指的是在cli命令行下添加的任务。在程序里加入的不是后台任务。

      在程序里添加的任务,用的是doBackground方法调用的work,如果在运行的时候work挂了,没有执行完的任务会保存在gearman job server中,不会丢失。当work重启后,会继续执行。

      为了保证,可以多启动几个work,job server会把任务分配到可用的server中,相当于多进程来执行job了。

      如果gearman job server挂了,那么任务就丢失了

      

    持久化队列将后台作业存放在一个外部持久的队列中。持久化队列只对后台jobs有效,因为前台jobs依附于客户端。如果job服务器挡掉了,客户端会检测到,将会从其他地方重新启动这个前台job或者返回错误。而后台jobs没有依附于客户端,如果要想让它运行则需要提交。

    /sbin/gearmand -p 4730 -L 0.0.0.0 -p 4730  -q MySQL --mysql-host=localhost  --mysql-port 3306 
    --mysql-user=root --mysql-password pwd --mysql-db=gearman --verbose DEBUG -d

    gearman用mysql持久化之后,其实会带来一些问题。

    1. 每个任务都会写入数据库,这样会带来磁盘IO的损耗,并且gearman的性能瓶颈又多了一个可能,就是由数据库引起的性能问题。

    2. mysql有个“wait_timeout”的参数,在mysql命令行中运行

    show variables like "%timeout%";

     可以看到wait_timeout的值,默认是28800。也就是说,如果一个mysql的连接,超过28800s没有任何响应,就会断开。

    3. gearman持久化的方式,如果超过了mysql的wait_timeouts的时间没有任何响应,和数据库的连接就会被mysql断开,而且gearman目前是没有mysql重新连接的,结果就是,会导致如下错误,必须重启gearman才能重新正常工作。

    gearman报错 

    ERROR 2014-04-01 02:10:02.897899 [ proc ] mysql_stmt_execute failed: -> libgearman-server/plugins/queue/mysql/queue.cc:357
    ERROR 2014-04-01 02:10:02.897910 [ proc ] gearman_server_job_add gearman_server_run_command(QUEUE_ERROR) -> libgearman-server/server.cc:301

    所以,gearman持久化方式带来的缺点显而易见,该方式下,要避免gearman对mysql连接超时断开,可以将mysql的wait_timeout参数改大。

    或者,直接放弃用mysql的持久化方式。

  • 相关阅读:
    Redis学习——(1)Redis安装与配置
    Ubuntu14.04安装Apache2+SVN+Trac
    Ubuntu14.04配置文件Apache2.conf
    Ubuntu系统用户忘记密码
    java中无符号类型的处理[转]
    Golang 切片(slice)扩容机制源码剖析
    无线网络:无线城域网和无线广域网
    vue项目 镜像重置的命令
    批量下载阿里云rpm包
    HttpClient psot和get请求
  • 原文地址:https://www.cnblogs.com/hanyouchun/p/5138815.html
Copyright © 2020-2023  润新知