`
yuyajian
  • 浏览: 15548 次
社区版块
存档分类
最新评论

快速提交导致gearman server 挂掉

 
阅读更多
这次在使用gearman做任务转发的时候遇到两个问题:
1,连续提交时client端报错
Exception in thread "Thread-5" java.nio.channels.ShutdownChannelGroupException
at sun.nio.ch.Invoker.invokeIndirectly(Invoker.java:210)
at sun.nio.ch.Invoker.invoke(Invoker.java:176)
at sun.nio.ch.Invoker.invoke(Invoker.java:285)
at sun.nio.ch.WindowsAsynchronousSocketChannelImpl$ReadTask.failed(WindowsAsynchronousSocketChannelImpl.java:600)
at sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:399)
at java.lang.Thread.run(Thread.java:744)
2,快速提交达到5K条左右,导致server死掉
 
第一个问题,看错误一开始以为是gearman关闭错误,
1,阅读代码,发现并没有太大的问题。按照网上百度出来的请求关闭方式书写,并不存在语法错误。
通过jvisualvm监控 tomcat和eclipse 的资源使用情况并未发现异常。

 
2,其中代码中有一段是create Gearman和 create GearmanServer引起了我的注意。
这段代码中每个请求都要create Gearman和 create GearmanServer。快速提交的时候这样是肯定不行的。
对这一块代码进行优化,将Gearman 和 Server的创建定义成静态变量,避免重复创建。
这样改完之后,再测试的时候发现只发送一次,报错 shudown server.
这里我犯了一个基础错误。静态变量只在类加载的时候加载,有且只加载一次。所有成员对象共用。
下面代码中finally模块中将gearman关闭,导致报错。
 
3,网上找到资料,使用submitJob提交时需要sleep一会儿,避免快速提交,server认为是攻击,将请求pending.
详见http://blog.csdn.net/luka2008/article/details/40864633
我使用的是submitBackgroundJob提交方式,同样我也尝试让它sleep(20).
测试结果是:Exception in thread 数量变少,但仍然存在。
 
4,与老大沟通之后,老大表示他使用perl请求时从来不关闭连接。
我将java中的链接关闭取消。测试不再报错。但出现新的问题,循环提交10000次,导致server死亡。
 
第二个问题,快速提交时导致server死亡。
server端问题主要是老大帮忙解决的。不知道他的思路,但记录下解决方法,学习一下。
老大在监控server端使用情况之后,反馈快速提交时导致CPU耗尽,server死掉。
此时我已经让提交时sleep(20) ,为了测试将sleep时间增加到1s,问题依然存在。
老大那边通知我,他”尝试关掉gearman server多余的线程,让它用单线程跑,貌似有希望 “。
我再次测试运行正常。
有时间需要研究一下 gearman server。
 
 
 
 
 
 
 
 
  • 大小: 663.6 KB
分享到:
评论

相关推荐

    gearman 文档

    2. **Gearman Server**:作为中间层接收来自客户端的任务请求,并将其分发给可用的工作节点。 3. **工作节点(Worker)**:执行实际的任务处理,并将结果返回给Gearman Server。 4. **结果返回**:Gearman Server将...

    Gearman java APIs和一个小Demo

    2. **Client**:客户端,用于提交任务到 Gearman 服务器,不等待结果返回。 3. **Job**:任务,是客户端提交给 Gearman 服务器的可执行单元,由一个函数名和数据组成。 4. **Server**:Gearman 服务器,负责调度任务...

    Gearman中文手册,Gearman中文详解,gearman手册chm

    Gearman中文手册,gearman手册chm,Gearman中文详解,分享gearman技术心得,主要是为了分享技术,所以不要大家的资源分。

    java-gearman-service(gearman-java-service)

    java实现gearman的job实现的jar包,包括gearman server,client和work客户端API

    Laravel开发-php-gearman

    2. **Client**:客户端,向 Gearman 服务器提交任务请求。 3. **Server**:任务调度中心,存储任务队列,分配任务给 Workers。 ### 使用 PHP Gearman 在 Laravel 中 在 Laravel 中集成 Gearman,你可以创建自定义...

    Gearman环境搭建资料

    Gearman是一种分布式任务队列系统,它允许应用程序在不同的服务器之间分发工作负载,从而实现负载均衡和异步处理。本篇文章将详细讲解如何在Linux环境中搭建Gearman,包括依赖库的安装和Gearman服务的配置。 首先,...

    Gearman C# API和示例

    在C#代码中,你可以创建`GearmanClient`对象来连接到Gearman服务器,然后使用`SubmitJob`方法提交新的任务。同时,`GearmanWorker`类则用于接收和执行来自服务器的任务。这些类都封装了Gearman的低级协议,使开发者...

    Gearman Worker实例 C++ vs2008

    然后,你可以使用`gearman_worker_create()`函数创建一个worker实例,并使用`gearman_worker_add_server()`函数连接到Gearman服务器。 在实现worker逻辑时,你需要注册感兴趣的函数(或任务)。使用`gearman_worker...

    gearman下载gearman下载

    通过引入这个jar文件,开发者可以轻松地在Java应用中调用Gearman的功能,例如提交任务、获取任务结果等。 最后,`readme_gearman.txt`文件通常是提供安装指南、使用说明或者项目相关信息的文本文件。它会包含关于...

    java-gearman-service-0.6.6.jar

    java实现gearman的job实现的jar包,包括gearman server,client和work客户端API

    GearMAN讲解及所带来的变革

    GearMAN是一个高效的分布式任务框架,最初设计用于解决Web2.0环境中图片处理等耗时任务的快速分配和执行问题。它的名字来源于“Generic Worker Manager”,意在成为一个通用的任务分发工具。GearMAN通过将任务分配给...

    gearman开源任务调度系统.pdf

    Gearman 有“AdministrativeProtocol”专门用于对 Gearman Server 的监控,主要涉及以下几方面: 1. Status:所注册职能分类、Worker 总数目、处于工作状态的 Worker 数目、可用 Worker 数目等。 2. Worker 的详细...

    Laravel开发-laravel-gearman-rpc

    $client->addServer(config('services.gearman.default.host'), config('services.gearman.default.port')); $job = new GearmanJob('my_task'); $job->setUnique(md5(microtime(true))); $job->setData(json_...

    gearman-1.0.2.tgz

    - **服务器(Server)**:服务器是 Gearman 的核心组件,负责接收任务请求,将任务分发给合适的工作器,并在任务完成后将结果返回给客户端。 - **任务(Job)**:任务是客户端提交到 Gearman 的一组数据,包括任务...

    Gearman中文手册最新完整版chm

    Gearman中文手册,gearman手册chm,Gearman中文详解,分享gearman技术心得,主要是为了分享技术,所以不要大家的资源分。

    php使用gearman进行任务分发操作实例详解

    1. Gearman的介绍和应用场景: Gearman是一个工作负载分发服务器和库,允许将工作分散到多个机器或者机器上的多个核心上进行异步处理。它在Web应用程序中处理耗时的后台任务时尤其有用,如文件上传、邮件发送、图片...

    java-gearman-service-0.6.6.zip

    java-gearman-service-0.6.6.zip 包,gearman分为3部分,client - server - worker,创建 java 版本的client和worker部分。 其实在gearman中,client和worker的编写不复杂,但是不同厂商提供的API是不大相同的,本...

    gearman-mysql-udf-0.6.tar.gz

    - **工作模式**:客户端提交任务到 Gearman 服务器,服务器将任务分发给等待工作的工人进程,工人执行任务并返回结果。 - **优点**:高并发、可扩展、容错性好,适合处理大量并发的短时任务。 2. **MySQL 用户...

    Gearman PHP Extension

    Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,Gearman更偏向于任务分发功能。它的 任务分布非常 简单,简单得可以只需要用脚本即可完成。Gearman最初用于LiveJournal的图片resize功能,由于...

    Gearman安装可能涉及到的安装包

    该资源包括安装Gearman时可能涉及到的软件包 具体包括gearmand、gearman、php、gperf、libevent

Global site tag (gtag.js) - Google Analytics