首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏TA码字

    Tomcat NIO(7)-Poller

    在这里我们主要介绍 poller 线程。 tomcat NIO 架构中会有 poller 线程,每一个 poller 实例都有一个 NIO selector对象,主要用于监测注册在原始 scoket 上的事件是否发生。 对于 poller thread,主要包括如下 items: 启动 poller 线程 添加事件到事件队列 对原始 socket 注册事件 poller 线程核心逻辑 poller 线程的等待与唤醒 启动 poller线程: poller 线程的启动主要在以前文章中介绍的架构类 NioEndpoint 的 startInternal 方法中完成,相关核心源代码如下: public void startInternal method to save space // Start poller thread poller = new Poller(); Thread pollerThread

    2.2K20发布于 2020-09-01
  • 来自专栏程序员同行者

    zabbix告警“Zabbix poller processes more than 75% busy”

    告警原因: 1.某个进程卡住了, 2.僵尸进程出错,太多,导致慢了 3.网络延迟(可忽略) 4.zabbix消耗的内存多了 告警危害: 普通告警,暂无危害(但是最好处理) 处理方法: 一:简单,粗暴(重启zabbix-server可结合定时任务使用) service zabbix-server restart  crontab -e 调出Cron编辑器中增加一个计划: @daily service zabbix-server restart > /dev/null 2>&1 二:编辑Zabbix Serve

    3.8K30发布于 2018-07-02
  • 来自专栏海怪的编程小屋

    造一个 promise-poller 轮子

    下面就带大家一起写一个 promise-poller 的轮子吧。 resolve(result) // 最后一个轮询任务了,结束并返回最后一次 taskFn 的结果 } } poll() }) } 至此,一个 Promisify 后的 poller 提供轮询任务重试的功能,并提供重试进度回调 提供多种轮询策略:fixed-interval, linear-backoff, exponential-backoff 以上就是 npm 包 promise-poller

    75320编辑于 2022-03-29
  • 来自专栏CSDN搜“看,未来”

    缩略muduo网络库(3)事件分发器poller

    在muduo的EventLoop里面有一个poller和一堆的channel,其实这个poller是一个抽象基类,子类有poll和epoll。大抵是二者其实都有有点,可以兼顾吧。 文章目录 纯虚基类 poller 子类:EpollPoller 纯虚基类 poller #pragma once #include "nocopyable.hpp" #include "timestamp.hpp 所属事件循环 }; #include "poller.hpp" #include "channel.hpp" Poller::Poller(EventLoop* loop) : ownnerloop _(loop) { } Poller::~Poller() = default; bool Poller::hasChannel(Channel* channel) const { auto (EventLoop* loop); /* 这个函数不能在这里实现,这个函数是要返回一个具体的子类的对象的 */ #include "poller.hpp" Poller* Poller::newDefaultPoller

    62910发布于 2021-10-09
  • 来自专栏TA码字

    Tomcat NIO(8)-Poller线程的阻塞与唤醒

    在上一篇文章里我们主要介绍了 tomcat NIO 中的 poller 线程,包括启动 poller 线程,添加事件到事件队列,对原始 socket 注册事件和 poller 线程的核心逻辑。 对于该设计,主要包括以下 items: 关键对象和实例 poller 线程的阻塞 poller 线程的唤醒 关键对象和实例 poller 线程的阻塞与唤醒主要涉及 poller 实例的 selector Poller线程的阻塞 poller 线程的阻塞由 poller实例的 run() 方法实现,主要核心逻辑如下: private AtomicLong wakeupCounter = new AtomicLong Poller线程的唤醒 poller 线程的唤醒由 poller 实例的 addEvent() 方法实现,根据以前文章,其间接的被 acceptor 线程通过 poller.register() 调用 根据上面"poller线程的阻塞"部分的分析,当 poller 阻塞的时候,wakeupCounter 的值为-1。

    1.7K50发布于 2020-09-10
  • 来自专栏微信公众号:Java团长

    [源码分析] 消息队列 Kombu 之 Hub

    _create_poller() @property def poller(self): if not self._poller: self. _poller @poller.setter def poller(self, value): self. _poller = value def _create_poller(self): self._poller = poll() self. _poller.unregister 这里需要注意的是: 在 MultiChannelPoller 之中,也会生成一个 poller,但是在注册时候,Transport 会使用 hub 的 poller ): self.poller = poller # 这里赋值 for channel in self.

    2K40发布于 2021-03-16
  • 来自专栏TA码字

    Tomcat NIO(5)-整体架构

    包括原始 socket 监听的acceptor 线程,监测注册在原始 scoket 上的事件是否发生的 poller thread 事件线程,进行数据读写和运行 servlet API 的 tomcat 当数据需要多次读写的时候,监测注册在原始 scoket 上的读写事件的 block poller 事件线程。这些类和线程共同组成的 tomcat NIO 整体结构如下所示: ? Poller线程 在 tomcat NIO 架构中会有 poller 线程,在 tomcat8 及以前的版本之中,可以通过 pollerThreadCount 配置 poller thread 的数目, 但是在 tomcat 9.0.21 中 poller thread 数目始终会为 1。 poller thread 的核心功能主要由以前文章中介绍的 Poller 类来实现,对于每一个 poller 实例都有一个 NIO selector 实例,同时也有一个事件队列SynchronizedQueue

    1.1K30发布于 2020-08-05
  • 来自专栏码匠的流水账

    聊聊spring cloud的HystrixCircuitBreakerConfiguration

    (); logger.info("Starting poller"); } private void addMetrics(Map<String = null) { this.poller.shutdown(); } } @Override public boolean isRunning() { return this.poller ! this.poller.isRunning() : false; } @Override public int getPhase() { = null) { this.poller.shutdown(); } callback.run(); }

    99820发布于 2018-09-17
  • 来自专栏木二天空

    026.Zabbix简单调优

    一 调优相关对应项 Zabbix busy trapper processes, in % StartTrappers=5 Zabbix busy poller processes, in % StartPollers =5 Zabbix busy ipmi poller processes, in % StartIPMIPollers=0 Zabbix busy discoverer processes, in % StartDiscoverers=1 Zabbix busy icmp pinger processes, in % StartPingers=1 Zabbix busy http poller processes , in % StartHTTPPollers=1 Zabbix busy proxy poller processes, in % StartProxyPollers=1 Zabbix busy unreachable poller processes, in % StartPollersUnreachable=1 Zabbix busy java poller processes, in % StartJavaPollers

    60820发布于 2019-07-26
  • 来自专栏TA码字

    Tomcat NIO(14)-BlockPoller线程的阻塞与唤醒

    上一篇文章我们主要介绍了 tomcat NIO 之中的 block poller 线程,包括启动 block poller 线程,添加事件到队列,对原始 socket 注册事件和 block poller 这里我们主要介绍 block poller 线程的阻塞与唤醒。 根据以前文章,block poller 线程一般会和 tomcat io 线程有交互,即 io 线程会把事件放到 block poller 线程的 SynchronizedQueue 事件队列之中。 对于该设计,主要包括以下: 关键对象和实例 block poller 线程的阻塞 block poller 线程的唤醒 关键对象和实例 block poller 线程的阻塞与唤醒主要涉及 block io 线程唤醒 block poller 线程。

    1.1K20发布于 2020-11-19
  • 来自专栏罗西的思考

    [源码分析] 消息队列 Kombu 之 启动过程

    _create_poller() 因为此时没有建立loop,所以目前重要的步骤是建立Poll,其Stack如下: _get_poller, eventio.py:321 poll, eventio.py _get_errors() # All channels share the same poller. self.connection.cycle.add(self) # add to channel poller. 用self.poller = poller把Transport与Hub的poll联系起来。这样 Transport 就可以利用 poll。 def on_poll_init(self, poller): self.poller = poller for channel in self.

    1.2K10发布于 2021-03-08
  • 来自专栏TBOOX开源工程

    tbox v1.6.5 发布,改进协程调度支持

    例如: win上通过thread+WaitForMultipleObjects的方式来对接到poller unix上通过thread/waitpid的方式来对接到poller 相关poller接口主要有下面四个 tb_bool_t tb_poller_insert(tb_poller_ref_t poller, tb_poller_object_ref_t object, tb_size_t events, tb_cpointer_t priv); tb_bool_t tb_poller_remove(tb_poller_ref_t poller, tb_poller_object_ref_t object); tb_bool_t tb_poller_modify(tb_poller_ref_t poller, tb_poller_object_ref_t object, tb_size_t events, tb_cpointer_t priv); tb_long_t tb_poller_wait(tb_poller_ref_t poller, tb_poller_event_func_t func, tb_long_t timeout

    63740发布于 2020-03-04
  • 来自专栏TA码字

    Tomcat NIO(9)-IO线程-Overall流程和关键类

    在上一篇文章里我们主要介绍了 tomcat NIO 中 poller 线程的阻塞与唤醒,根据以前文章当 poller 线程监测到连接有数据可读事件的时候,会把原始 socket 的包装对象委托到 tomcat poller = NioEndpoint.this.poller; if (poller == null) { socketWrapper.close(); return 如果返回的 SocketState 为 CLOSED ,则调用 poller.cancelledKey() 方法,会把原始 sockte 关闭。 线程的事件队列里,让 poller 线程继续监听 client 端可读事件。 由于是长连接,所以和异步处理方式一样,对 socket 包装对象注册 OP_READ 事件,并添加到 poller 线程事件队列中,让 poller 线程继续监听 client 端可读事件。

    1K30发布于 2020-09-24
  • 来自专栏nobody

    一图理解tomcat线程模型

    Http11NioProtocol(默认启用的) 【servlet3异步支持模型,下次上图】 1、tomcat关键的三种类型线程:Acceptor Thread(接收客户端连接,一个线程)、Poller 创建的客户端连接会进入Poller Thread的事件队列,等待Poller Thread轮询处理。 t.setPriority(getAcceptorThreadPriority()); t.setDaemon(getDaemon()); t.start(); } 客户端连接进入Poller Thread的事件队列: 3、Poller Thread 采用Reactor模型,会处理事件队列及网络IO事件。 Acceptor Thread的队列属于tcp全连接队列,tcp半连接队列容量可以通过操作系统配置(注意每种类型的队列容量是否受限); 6、业务处理完返回数据时,如果返回数据太大,即写缓冲区容量不够,会进入Poller

    2.2K10编辑于 2023-09-18
  • 来自专栏开源部署

    Net-SNMP安装配置整理

    v 2c -c public localhost 如果返回的不是Time out,而是系统信息就说明net-snmp安装成功 Cacti 开机不出图 解决办法 修复数据库 错误信息: CMDPHP: Poller , Error:'145', SQL:"select poller_output.output, poller_output.time, poller_output.local_data_id, poller_item.rrd_path , poller_item.rrd_name, poller_item.rrd_num from (poller_output,poller_item) where (poller_output.local_data_id =poller_item.local_data_id and poller_output.rrd_name=poller_item.rrd_name) LIMIT 10000" 解决办法: mysqlcheck

    2.3K20编辑于 2022-07-03
  • 来自专栏微信公众号【Java技术江湖】

    Java网络编程与NIO详解11:Tomcat中的Connector源码分析(NIO)

    线程 // 还记得之前 init 的时候,默认地设置了 poller 的数量为 2,所以这里启动 2 个 poller 线程 pollers = new Poller[getPollerThreadCount Poller 之前我们看到 acceptor 将一个 NioChannel 实例 register 到了一个 poller 中。 public class Poller implements Runnable { public Poller() throws IOException { // 每个 poller 然后,现在来看 Poller 的 run() 方法,该方法会一直循环,直到 poller.destroy() 被调用。 ,当然它们都是默认值,可配; Acceptor 获取到新的连接后,getPoller0() 获取其中一个 Poller,然后 register 到 Poller 中; Poller 循环 selector.select

    73810发布于 2019-11-24
  • 来自专栏程序员的成长之路

    面试官:谈谈 Tomcat 请求处理流程,我一脸懵逼。。

    用于接受新连接,并将新连接封装一下,选择一个 Poller 将新连接添加到 Poller 的事件队列中。 Poller 线程组。 配置完 Socket 以后将 Socket 封装到 NioChannel 中,并注册到 Poller,值的一提的是,我们一开始就启动了多个 Poller 线程,注册的时候,连接是公平的分配到每个 Poller () 方法会将 Socket 添加到该 Poller 的 PollerEvent 队列中。 Poller ? selector.select(1000)。当 Poller 启动后因为 selector 中并没有已注册的 Channel,所以当执行到该方法时只能阻塞。 到此 Poller 的任务就完成了。 Worker ?

    50610发布于 2021-07-13
  • 来自专栏开源部署

    Gentoo 安装Cacti 错误

    Type The poller type to use. This setting will take effect at next polling interval. spine (默认是cmd.php) 3.收集的时候出现 POLLER: Poller[0 Exiting http://chinaapp.sinaapp.com/thread-tag/poller-poller0-maximum-runtime-of-298-seconds-exceeded-exiting cacti->Console->setting->Poller->: 修改cacti setting的poller设置. settting–>poller: Maximum Concurrent Poller --force &>/dev/null 5.Settings--poller Poller Interval The polling interval in use.

    1.3K10编辑于 2022-06-29
  • 来自专栏TA码字

    Tomcat NIO(6)-Acceptor

    在tomcat NIO 中会有一个独立的 acceptor 线程,主要负责接监听端口,接受连接请求,并将请求事件注册到 poller 线程中,主要包括如下: 初始化 server socket,并绑定监听端口 将请求事件注册到poller线程 该工作主要在以前文章中介绍的 NioEndpoint 的 setSocketOptions 方法和 Poller类中的 register 方法中完成,相关源代码如下: 调用以前文章介绍的 poller 的 register(channel, socketWrapper) 方法将上面构造的 NioChannel 对象和 NioSocketWrapper 对象注册到 pollerpoller 对象的 register() 方法分析可知,会注册 OP_REGISTER 类型的PollerEvent 到 poller 对象的事件队列里。 目前先写到这里,下一篇文章里我们继续介绍 tomcat NIO 中的 poller 线程。

    1.5K31发布于 2020-08-25
  • 来自专栏后台通用技术

    gnet源码分析

    . func OpenPoller() (poller *Poller, err error) { poller = new(Poller) // epoll_create if = nil { _ = poller.Close() poller = nil err = os.NewSyscallError("eventfd", err ) return } poller.wfdBuf = make([]byte, 8) // if err = poller.AddRead(poller.wfd = nil { _ = poller.Close() poller = nil return } poller.asyncJobQueue = internal.NewAsyncJobQueue() return } // Close closes the poller. func (p *Poller) Close() error

    2.5K20发布于 2021-10-08
领券