精华内容
下载资源
问答
  • 2014-06-09 13:12:45

    系统是xp,在重新启动安装之前,“开始”——》“运行”,运行msconfig,选择的是“正常启动”,则就会加载所有服务,包括rpc服务;选择是“有选择的启动”,您必须选中“加载系统服务”一项保证服务启动时加载。


    然后重新启动电脑。(这是在装打印机驱动的过程中出现的错误。)

    更多相关内容
  • 电脑提示"RPC服务器不可用"解决办法

    千次阅读 2021-08-01 02:56:35
    电脑提示"RPC服务器不可用"解决办法腾讯视频/爱奇艺/优酷/外卖 充值4折起在使用电脑的过程中,有些小伙伴遇到了电脑提示“RPC服务器不可用”的情况。那么, 电脑提示“RPC服务器不可用”怎么办呢?下面,就和小编一...

    电脑提示"RPC服务器不可用"解决办法

    腾讯视频/爱奇艺/优酷/外卖 充值4折起

    在使用电脑的过程中,有些小伙伴遇到了电脑提示“RPC服务器不可用”的情况。那么, 电脑提示“RPC服务器不可用”怎么办呢?下面,就和小编一起来看看吧。

    56c953a6b6adbd4a0cba5a0a155b7776.png

    原因分析:

    根据报错信息观察RPC服务是已启动的状态,说明此报错还和其他的服务有关。

    2a1e1659d478b258bb834701a60a95d0.png

    从而定位到Virtual Disk服务,该服务的作用:提供用于磁盘、卷、文件系统和存储阵列的管理服务。

    解决方案:

    首先、用WIN+R调出运行中输入diskmgmt.msc。

    第二、如果Virtual Disk服务被停用,重新启动该服务问题解决。

    8edf5313bd3ec5a2145f63164ebf47ae.png

    第三、如果Virtual Disk服务是正在运行的状态,而磁盘管理器依然报错,可以把该服务重新启动然后重新打开磁盘管理。

    26fdc30d005d9c490c08372a0a095d1c.png

    腾讯视频/爱奇艺/优酷/外卖 充值4折起

    时间:2015-11-30 13:17 / 作者:百科全说

    5a63401d8fa2306cf372be578c407841.gif

    原因分析: 根据报错信息观察RPC服务是已启动的状态,说明此报错还和其他的服务有关. 从而定位到Virtual Disk服务,该服务的作用:提供用于磁盘.卷.文件系统和存储阵列的管理服务. 解决方案: 首先.用WIN+R调出运行中输入diskmgmt.msc. 第二.如果Virtual Disk服务被停用,重新启动该服务问题解决. 第三.如果Virtual Disk服务是正在运行的状态,而磁盘管理器依然报错,可以把该服务重新启动然后重新打开磁盘管理.

    5a63401d8fa2306cf372be578c407841.gif

    电脑系统存在各种服务器,这些服务器都在同时为系统服务着.也许您遇到过这种故障,就是当你输入netsh命令中添加ip地址或添加打印机的时候,这个系统就会提示:rpc服务器不可用.对于Win7系统用户来说,遇到这个问题算是比较常见的,但往往大部分用户遇到这个问题不知道如何解决.那么Win7提示rpc服务器不可用怎么办呢?下面我们小编为大家分享一种Win7系统提示rpc服务器不可用的解决办法. Rpc服务器是指远程过程调用协议: 一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.

    5a63401d8fa2306cf372be578c407841.gif

    故障图: 原因分析: 1、根据报错信息观察RPC服务是已启动的状态,说明此报错还和其他的服务有关系,从而定位到Virtual Disk服务,该服务的作用:提供用于磁盘、卷、文件系统和存储阵列的管理服务。 解决步骤: 1、在键盘按下“win+R”打开运行对话框,并运行diskmgmt.msc,回车打开磁盘管理界面; 2、如果Virtual Disk服务被停用的,重新启动该服务就可以解决问题了。 3、如果Virtual Disk服务是正在运行的状态的话,而磁盘管理器依然报错,那么可以把该服务重新

    5a63401d8fa2306cf372be578c407841.gif

    电脑提示计算机内存不足的解决办法 下面是小编给大家介绍电脑提示计算机内存不足的解决办法?希望对您有所帮助! 系统,Windows7 旗舰版 内存2G 运行有QQ2011,只打开几个网页就会经常弹出"计算机内存不足"等提示 排除病毒原因 任务管理器显示 物理内存 64% 1.28GB 进程 50 如何解决该问题呢,其实很简单 计算机->右键属性->高级系统设置->高级->性能-设置->高级选项卡->虚拟内存-修改->选一个盘,如C盘,点下面为系统

    5a63401d8fa2306cf372be578c407841.gif

    下面是脚本之家编辑通过查找一系列文章总结的方法,已测可用。实在不行的可以留言 一般而言,出现这种情况主要有以下几种原因和解决办法: 1.RPC服务没有启动 “开始”--〉“设置”--〉“控制面板”找到“管理工具”--〉“服务”,找到“Remote Procedure Call (RPC)”,双击打开,在“启动类型”里选择“自动”后,点击确定;找到“Remote Procedure Call (RPC) Locator”,双击打开,在“启动类型”里选择“自动”后,点击确定;最后重新启动电脑后,按照

    5a63401d8fa2306cf372be578c407841.gif

    有时候我们想要在Netsh命令中添加IP地址或者安装打印机时,发现电脑会提示"RPC服务器不可用",这个问题虽然很常见,但是很多用户都不懂得怎么解决,那么当你遇到Win7系统RPC服务器不可用该怎么办呢?不懂的朋友,看看以下文章吧! 方法/步骤: 1.使用Netsh interface ip add 添加IP的时候出现下面的提示:RPC服务器不可用. 2.解决办法在这里开始:打开运行框;输入Services.msc命令. 3.来到服务器管理器,确认一下RPC服务是否开启状态.[Remo

    02/26 08:57

    很多朋友在给自己的打印机安装驱动程序的时候会遇到提示“无法安装这个硬件,RPC服务器不可用”的情况,那么什么是PRC,为什么会提示rpc服务器不可用呢?小编搜集整理如下: 在执行下列任一基于服务器的任务时,可能收到“RPC server is unavailable (RPC 服务器不可用)”错误信息: • 复制 • Winlogon • 启用受信任的关系 • 连接到域控制器 • 连接到受信任的域 • 用户身份验证 注意:在成员服务器上运行 Dcpromo 时

    5a63401d8fa2306cf372be578c407841.gif

    电脑打印机出错,打印机出现RPC服务器不可用怎么办,打印机出现RPC服务器不可用怎么修复 ? 1、电脑打印机出错,打印机出现RPC服务器不可用怎么办 2、打开控制面版(系统版本不一样略不一样),找到服务 3、服务列表中找到Print spooler,发现这个没启动(没有正在运行) 4、右键点启动(自动)就可以了,一般这样就可以打印了(或进入属性可以更多的设置) 5、服务也检查一下remote procedure call (RPC)及Server两项是否启动(自动)这个也一定要启动(自动),如图

    如果你运行IIS时也遇到"RPC服务器不可用"的故障提示,不妨试试我们下面的办法. 依次点击"管理工具→服务→Remote Procedure Call→属性",其默认启动类别是"自动",但选项是灰色的(不可用状态),点击标签"登录",将硬件配置文件服务禁用,重新启动系统. 方法一:修改注册表 运行注册表编辑器,打开HKEY_LOCAL_MACHINEsystemCurrentControl-SetServicesRpcSs分

    展开全文
  • RPC服务器不可用解决方法汇集

    万次阅读 2011-08-20 11:58:57
    A简单方法: ...通过"控制面板/管理工具/服务",检查一下RPC的Remote Procedure Call (RPC)和Remote Procedure Call (RPC) Locator这两项服务的情况,将它们设置为自动启动。 如果还不行,看看DCOM Server Pr
     A简单方法:

    通过"控制面板/管理工具/服务",检查一下RPC的Remote Procedure Call (RPC)和Remote Procedure Call (RPC) Locator这两项服务的情况,将它们设置为自动启动。

    如果还不行,看看DCOM Server Process Launcher这个服务是否已经运行?如果没有,设置DCOM服务为自动启动,即可解决

    B复杂方法:

    首先,导致“RPC服务器不可用”的原因有可能是我们在服务项目里禁用了RPC,对此我们应该启用此项服务。解决的办法有下面这几种:

    方法一:修改注册表

    运行注册表编辑器,打开HKEY_LOCAL_MACHINEsystemCurrentControl-SetServicesRpcSs分支,将Start项的值由“4”修改为“2”,即把启动类型设为自动,重新启动系统即可。

    方法二:使用“SC”命令

    进入“命令提示符”窗口,键入“sc config RpcSs start=auto”命令,系统会显示“SC ChangeServiceConfig SUCCESS”,这样就可以成功启用RPC服务。

    方法三:使用故障恢复控制台

    以Windows 2003系统为例,用安装光盘启动,系统进入到Windows 2003安装界面,按下“R”键登录到故障恢复控制台。在故障恢复控制台下,键入“enable RpcSs service_auto_start”命令,然后再键入“exit”命令,重新启动系统,以正常模式登录,即可成功启用RPC服务。

    其次,在网上有看到某位网友有出现下面的问题。如果有遇到下面的问题就照着他的办法做。

    笔者使用上面的几种方法都不成功,看来只有自己动手解决了。我想注册表中的某些键值一定要变,这样才能启用。
    把禁用前的备份注册表恢复到被禁用后的注册表中,提示无法导入,不成功。无法启用。

    把禁用前和禁用后的两个注册表(只取HKEY_LOCAL_MACHINESYSTEM分支)内容转化成Word文档,再使用Word中的“比较并合并文档”功能,就能自动找到两个注册表的不同之处。我通过比较分析,发现禁用后的注册表中有以下分支:

    1. HKEY_LOCAL_MACHINESYSTEMCurr-entControlSetHardwareProfiles001SystemCurrentControlSetEnumROOTLEGACY_RPCSS

    2.HKEY_LOCAL_MACHINESYSTEMCurr-entControlSetHardwareProfilesCurrentSystemCurrentControlSetEnumROOTLEGACY_RPCSS

    禁用前的注册表中没有以上两个分支。通过进一步操作,发现只要删除第1个分支即可重新起用RPC服务。

    原来上面三种方法,只能应用于把RPC服务启动类型改为禁止后的情况。笔者关闭RPC服务不是改变启动类型,而是禁止与之相关联的硬件配置文件服务,“Start”项的值仍是“2”,没有变。所以先要将硬件配置文件服务启用,才能启用RPC服务。”

    再次,我发现我使用上面两步都没有办法把我的问题解决,怎么办呢?其实,上面两步实现是在Dcom服务打开的基础上的。同样,Dcom的那项服务也是在服务里面,在“开始”--“运行”里输入“services.msc”,找到一项以Dcom开头的服务项目,改为“手动”模式,然后“启动”服务。这样就可以了!试一试(可以成功哦~) 打开磁盘管理器,提示:RPC服务器不可用的解决方法
    启动DCOM服务,并重新注册以下文件;运行即可 regsvr32 c:\windows\system32\msxml3.dll


    -----------------------------------------

    类似的文章收集:

    RPC服务器不可用怎么办?
    rpc服务器不可用究竟是什么原因导致的? 


    RPC(RPCremote procedure call )服务没有正常启动。点击开始→设置→控制面板→管理工具→服务中,找到"remote procedure call (rpc)",双击打开,在"启动类型"里选择"自动"后,点击确定;
    运行→MSCONFIG,选择“正常启动”,则就会加载所有服务,包括rpc服务; 选择是“有选择的启动”,您必须选中“加载系统服务”一项保证服务启动时加载,最后重新启动电脑。

    有时候rpc服务器不可用也是由于病毒导致,曾经知名的冲击波就是利用rpc进行攻击。

    电脑遭到冲击波可能会出现以下症状:

    1、系统资源紧张,应用程序运行速度异常。
    2、Word、Excel、PowerPoint等软件无法正常运行。
    3、系统无故重启,或在弹出“系统关机”警告提示后自动重启等等。 

    也许大家在安装软件或驱动程序时候系统会提示:“安装程序启动安装引擎失败,rpc服务器不可用”从而安装失败.
    先解释一下rpc服务器的意义和作用:Remote Procedure Call(远程过程调用协议)即RPC。它是windowns操作系统使用的一个协议,它提供一种进程间通信机制。通过这一机制,在一台计算机上运行的程序可以顺畅的执行某个远程系统上的代码,即是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 该协议本身是从OSF(开放式软件基础)RPC协议衍生出来的,只是增加了一些Micorsoft特定的扩展。

    那么出项上述故障的原因和解决办法又是怎样的呢?
    出现上述状况一般的情况下是DCOM Server Process Launcher 服务被关闭了,把它重新打开就好了!
    "开始"--〉"设置"--〉"控制面板"找到"管理工具"--〉"服务",找到"Remote Procedure Call (RPC)",双击打开,在"启动类型"里选择"自动"后,点击确定;最后重新启动电脑后,按照正确的方法再安装一遍软件即可解决问题。
    另外,如果您的系统是XP,在重新启动安装之前,“开始”——》“运行”,运行msconfig,选择的是“正常启动”,则就会加载所有服务,包括RPC服务;选择是“有选择的启动”,您必须选中“加载系统服务”一项保证服务启动时加载。
    当然还有可能引起RPC服务不可用的原因就是受到病毒的影响,可以先全盘扫描一遍。
    如果还不行,就要考虑以下下几点: 
    1、是否中了冲击波病毒?查杀病毒。
    2、重新启动RPC的方法,只供参考:
    曾经肆虐一时的"冲击波"病毒利用Remote Procedure Call(简称RPC)服务的DCOM漏洞攻击基于NT内核的Windows 2000/XP/2003操作系统,很多用户为了躲避它的攻击,禁用了RPC服务。但当他们想再次启用RPC服务时却发现"RPC服务属性"页的"启动类型"下拉列表框和"启动"按钮变成了灰色,甚至根本找不到该服务的属性页。由于Windows服务之间有很强的相互依存关系,当RPC服务被禁用后,很多依赖于RPC服务的系统服务也不能正常运行(见图),如Messenger服务、Windows Installer服务等;另外,还可能导致某些应用程序运行失败和系统异常。下面就介绍三种启动该服务的方法。


    方法一:修改注册表法  
    点击"开始→运行",键入"Regedit"打开"注册表编辑器",展开分支"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs",将Start项的值修改为"00000002",重新启动系统即可。


    方法二:使用sc.exe命令
    点击"开始→运行",键入"cmd"进入"命令提示符"窗口,键入"sc config RpcSs start= auto"命令,系统会显示"SC ChangeServiceConfig SUCCESS",这样就可以成功启动RPC服务。
    注意:要想使用"sc"命令必须安装Windows 2000/2003 Resource Kit(资源工具包),否则使用该命令无效。

    方法三:使用故障恢复控制台
    以Windows XP系统为例,在光驱中放入安装光盘,并且在BIOS参数中设置为从CD-ROM启动;启动电脑后,系统进入到Windows XP安装界面,按下"R"键登录到故障恢复控制台。在故障恢复控制台下,键入"enable RpcSs service_auto_start"命令,然后再键入"exit"命令,重新启动系统,以正常模式登录,即可成功启动RPC服务。
    注意:"Enable"是故障恢复控制台提供的一个用来启动系统服务和设备驱动程序的命令,只能在故障恢复控制台下使用。

    展开全文
  • RPC框架详解

    千次阅读 2021-07-19 15:37:51
    第一部分-RPC框架 1.Socket回顾与I/0模型 1.1 Socket网络编程回顾 Socket,套接字就是两台主机之间逻辑连接的端点。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装...

    第一部分-RPC框架

    1.Socket回顾与I/0模型

    1.1 Socket网络编程回顾

    Socket,套接字就是两台主机之间逻辑连接的端点。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议、本地主机的IP地址、本地进程的协议端口、远程主机的IP地址、远程进程的协议端口。
    Socket整体流程
    在这里插入图片描述

    1.2 I/O模型

    1.2.1 I/O模型说明

    1. I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能
    2. Java 共支持 3 种网络编程模型/IO 模式:BIO(同步并阻塞)、NIO(同步非阻塞)、AIO(异步非阻塞)
      阻塞与非阻塞

    主要指的是访问IO的线程是否会阻塞(或处于等待)
    线程访问资源,该资源是否准备就绪的一种处理方式

    在这里插入图片描述
    同步和异步

    主要是指的数据的请求方式
    同步和异步是指访问数据的一种机制

    在这里插入图片描述

    1.2.2 BIO(同步并阻塞)

    BIO(blocking I/O) : 同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)。
    在这里插入图片描述

    BIO问题分析

    1. 每个请求都需要创建独立的线程,与对应的客户端进行数据 Read,业务处理,数据 Write
    2. 并发数较大时,需要创建大量线程来处理连接,系统资源占用较大
    3. 连接建立后,如果当前线程暂时没有数据可读,则线程就阻塞在 Read 操作上,造成线程资源浪费

    1.2.3 NIO(同步非阻塞)

    NIO(New I/O):同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求就进行处理

    在这里插入图片描述

    1.2.4 AIO(异步非阻塞)

    AIO(Asynchronous I/O): 引入异步通道的概念,采用了 Proactor 模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用

    1.2.5 BIO、NIO、AIO 适用场景分析

    • BIO(同步并阻塞)
      方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序简单易理解
    • NIO(同步非阻塞)
      方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,弹幕系统,服务器间通讯等。编程比较复杂,JDK1.4 开始支持
    • AIO(异步非阻塞)
      方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用 OS 参与并发操作, 编程比较复杂,JDK7 开始支持。

    2.NIO编程

    2.1 NIO介绍

    • NIO 有三大核心部分:Channel(通道),Buffer(缓冲区), Selector(选择器)
    • NIO是 面向缓冲区编程的。数据读取到一个缓冲区中,需要时可在缓冲区中前后移动,这就增加了处理过程中的灵活性,使用它可以提供非阻塞式的高伸缩性网络
    • Java NIO 的非阻塞模式,使一个线程从某通道发送请求或者读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此,一个线程请求写入一些数据到某通道,但不需要等待它完全写入, 这个线程同时可以去做别的事情。通俗理解:NIO 是可以做到用一个线程来处理多个操作的。假设有 10000 个请求过来,根据实际情况,可以分配50 或者 100 个线程来处理。不像之前的阻塞 IO 那样,非得分配 10000 个

    2.2 NIO和 BIO的比较

    • BIO 以流的方式处理数据,而 NIO 以缓冲区的方式处理数据,缓冲区 I/O 的效率比流 I/O 高很多
    • BIO 是阻塞的,NIO则是非阻塞的
    • BIO 基于字节流和字符流进行操作,而 NIO 基于 Channel(通道)和 Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择器)用于监听多个通道的事件(比如:连接请求, 数据到达等),因此使用单个线程就可以监听多个客户端通道

    2.3 NIO 三大核心原理示意图

    在这里插入图片描述

    1. 每个 channel 都会对应一个 Buffer
    2. Selector 对应一个线程, 一个线程对应多个 channel(连接)
    3. 每个 channel 都注册到 Selector选择器上
    4. Selector不断轮询查看Channel上的事件, 事件是通道Channel非常重要的概念
    5. Selector 会根据不同的事件,完成不同的处理操作
    6. Buffer 就是一个内存块 , 底层是有一个数组
    7. 数据的读取写入是通过 Buffer, 这个和 BIO , BIO 中要么是输入流,或者是输出流, 不能双向,但是NIO 的 Buffer 是可以读也可以写 , channel 是双向的。

    2.4 缓冲区(Buffer)

    2.4.1 基本介绍

    缓冲区(Buffer):缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个数组,该对象提供了一组方法,可以更轻松地使用内存块,,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。Channel 提供从网络读取数据的渠道,但是读取或写入的数据都必须经由 Buffer。
    在这里插入图片描述

    2.4.2 Buffer常用API介绍

    1. Buffer 类及其子类
      在这里插入图片描述
      在 NIO 中,Buffer是一个顶层父类,它是一个抽象类, 类的层级关系图,常用的缓冲区分别对应byte,short, int, long,float,double,char 7种.

    2. 缓冲区对象创建
      在这里插入图片描述

    3. 缓冲区对象添加数据
      在这里插入图片描述
      图解:
      在这里插入图片描述

    4. 缓冲区对象读取数据
      在这里插入图片描述
      图解:
      flip()方法
      在这里插入图片描述
      clear()方法
      在这里插入图片描述

    2.5 通道(Channel)

    2.5.1 基本介绍

    通常来说NIO中的所有IO都是从 Channel(通道) 开始的。NIO 的通道类似于流,但有些区别如下:

    1. 通道可以读也可以写,流一般来说是单向的(只能读或者写,所以之前我们用流进行IO操作的时候需要分别创建一个输入流和一个输出流)
    2. 通道可以异步读写
    3. 通道总是基于缓冲区Buffer来读写
      在这里插入图片描述

    2.5.2 Channel常用类介绍

    1. Channel接口
      常 用 的Channel实现类类 有 :FileChannel , DatagramChannel ,ServerSocketChannel和SocketChannel 。FileChannel 用于文件的数据读写, DatagramChannel 用于 UDP 的数据读写, ServerSocketChannel 和SocketChannel 用于 TCP 的数据读写。【ServerSocketChanne类似 ServerSocket , SocketChannel 类似 Socket】
    2. SocketChannel 与ServerSocketChannel
      类似 Socke和ServerSocket,可以完成客户端与服务端数据的通信工作.

    2.6 Selector (选择器)

    2.6.1 基本介绍

    可以用一个线程,处理多个的客户端连接,就会使用到NIO的Selector(选择器). Selector 能够检测多个注册的服务端通道上是否有事件发生,如果有事件发生,便获取事件然后针对每个事件进行相应的处理。这样就可以只用一个单线程去管理多个通道,也就是管理多个连接和请求。
    在这里插入图片描述
    在这种没有选择器的情况下,对应每个连接对应一个处理线程. 但是连接并不能马上就会发送信息,所以还会产生资源浪费

    在这里插入图片描述
    只有在通道真正有读写事件发生时,才会进行读写,就大大地减少了系统开销,并且不必为每个连接都创建一个线程,不用去维护多个线程, 避免了多线程之间的上下文切换导致的开销

    2.6.2 常用API介绍

    • Selector 类是一个抽象类
      常用方法:
    • Selector.open() : //得到一个选择器对象
    • selector.select() : //阻塞 监控所有注册的通道,当有对应的事件操作时,
      会将SelectionKey放入集合内部并返回事件数量
    • selector.select(1000): //阻塞 1000 毫秒,监控所有注册的通道,当有对应的事件操作时,
      会将SelectionKey放入集合内部并返回
    • selector.selectedKeys() : // 返回存有SelectionKey的集合
    • SelectionKey
      常用方法
    • SelectionKey.isAcceptable(): 是否是连接继续事件
    • SelectionKey.isConnectable(): 是否是连接就绪事件
    • SelectionKey.isReadable(): 是否是读就绪事件
    • SelectionKey.isWritable(): 是否是写就绪事件
      SelectionKey中定义的4种事件:
      SelectionKey.OP_ACCEPT —— 接收连接继续事件,表示服务器监听到了客户连接,服务器可以接收这个连接了
      SelectionKey.OP_CONNECT —— 连接就绪事件,表示客户端与服务器的连接已经建立成功
      SelectionKey.OP_READ —— 读就绪事件,表示通道中已经有了可读的数据,可以执行读操作了(通道目前有数据,可以进行读操作了)
      SelectionKey.OP_WRITE —— 写就绪事件,表示已经可以向通道写数据了(通道目前可以用于写操作)

    3.Netty核心原理

    3.1 Netty 介绍

    3.1.1 原生 NIO 存在的问题

    1. NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。
    2. 需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。
    3. 开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等。
    4. JDK NIO 的 Bug:臭名昭著的 Epoll Bug,它会导致 Selector 空轮询,最终导致 CPU 100%。直到JDK 1.7版本该问题仍旧存在,没有被根本解决

    在NIO中通过Selector的轮询当前是否有IO事件,根据JDK NIO api描述,Selector的select方法会一直阻塞,直到IO事件达到或超时,但是在Linux平台上这里有时会出现问题,在某些场景下select方法会直接返回,即使没有超时并且也没有IO事件到达,这就是著名的epoll bug,这是一个比较严重的bug,它会导致线程陷入死循环,会让CPU飙到100%,极大地影响系统的可靠性,到目前为止,JDK都没有完全解决这个问题。

    3.1.2 概述

    Netty 是由 JBOSS 提供的一个 Java 开源框架。Netty 提供异步的、基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络 IO 程序。 Netty 是一个基于 NIO 的网络编程框架,使用Netty 可以帮助你快速、简单的开发出一 个网络应用,相当于简化和流程化了 NIO 的开发过程。 作为当前最流行的 NIO 框架,Netty 在互联网领域、大数据分布式计算领域、游戏行业、 通信行业等获得了广泛的应用,知名的 Elasticsearch 、Dubbo 框架内部都采用了 Netty。
    在这里插入图片描述
    从图中就能看出 Netty 的强大之处:零拷贝、可拓展事件模型;支持 TCP、UDP、HTTP、WebSocket 等协议;提供安全传输、压缩、大文件传输、编解码支持等等。

    具备如下优点:

    1. 设计优雅,提供阻塞和非阻塞的 Socket;提供灵活可拓展的事件模型;提供高度可定制的线程模型。
    2. 具备更高的性能和更大的吞吐量,使用零拷贝技术最小化不必要的内存复制,减少资源的消耗。
    3. 提供安全传输特性。
    4. 支持多种主流协议;预置多种编解码功能,支持用户开发私有协议。

    3.2 线程模型

    目前存在的线程模型有:

    • 传统阻塞 I/O 服务模型
    • Reactor 模型 根据 Reactor 的数量和处理资源池线程的数量不同,有 3 种典型的实现
    • 单 Reactor 单线程
    • 单 Reactor 多线程
    • 主从 Reactor 多线程

    3.2.2 传统阻塞 I/O 服务模型

    采用阻塞 IO 模式获取输入的数据, 每个连接都需要独立的线程完成数据的输入 , 业务处理和数据返回工作.
    在这里插入图片描述
    存在问题:

    1. 当并发数很大,就会创建大量的线程,占用很大系统资源
    2. 连接创建后,如果当前线程暂时没有数据可读,该线程会阻塞在 read 操作,造成线程资源浪费

    3.2.3 Reactor 模型

    Reactor 模式,通过一个或多个输入同时传递给服务处理器的模式 , 服务器端程序处理传入的多个请求,并将它们同步分派到相应的处理线程, 因此 Reactor 模式也叫 Dispatcher模式.
    Reactor 模式使用IO 复用监听事件, 收到事件后,分发给某个线程(进程), 这点就是网络服务器高并发处理关键.

    1. 单 Reactor 单线程
      在这里插入图片描述
    • Selector是可以实现应用程序通过一个阻塞对象监听多路连接请求
    • Reactor 对象通过 Selector监控客户端请求事件,收到事件后通过 Dispatch 进行分发
    • 是建立连接请求事件,则由 Acceptor 通过 Accept 处理连接请求,然后创建一个 Handler对象处理连接完成后的后续业务处理
    • Handler 会完成 Read→业务处理→Send 的完整业务流程

    优点:

    • 模型简单,没有多线程、进程通信、竞争的问题,全部都在一个线程中完成

    缺点:

    • 性能问题: 只有一个线程,无法完全发挥多核 CPU 的性能。Handler 在处理某个连接上的业务时,整个进程无法处理其他连接事件,很容易导致性能瓶颈
    • 可靠性问题: 线程意外终止或者进入死循环,会导致整个系统通信模块不可用,不能接收和处理外部消息,造成节点故障
    1. 单 Reactor多线程
      在这里插入图片描述
    • Reactor 对象通过 selector 监控客户端请求事件, 收到事件后,通过 dispatch 进行分发
    • 如果建立连接请求, 则右 Acceptor 通过accept 处理连接请求
    • 如果不是连接请求,则由 reactor 分发调用连接对应的 handler 来处理
    • handler 只负责响应事件,不做具体的业务处理, 通过 read 读取数据后,会分发给后面的worker 线程池的某个线程处理业务
    • worker 线程池会分配独立线程完成真正的业务,并将结果返回给 handler
    • handler 收到响应后,通过 send 将结果返回给 client
      优点:

    可以充分的利用多核 cpu 的处理能力

    缺点:

    多线程数据共享和访问比较复杂, reactor 处理所有的事件的监听和响应,在单线程运行, 在高并发场景容易出现性能瓶颈

    1. 主从 Reactor 多线程
      在这里插入图片描述
    • Reactor 主线程 MainReactor 对象通过 select 监听客户端连接事件,收到事件后,通过Acceptor处理客户端连接事件
    • 当 Acceptor 处理完客户端连接事件之后(与客户端建立好 Socket 连接),MainReactor 将连接分配给SubReactor。(即:MainReactor 只负责监听客户端连接请求,和客户端建立连接之后将连接交由 SubReactor监听后面的 IO 事件。)
    • SubReactor 将连接加入到自己的连接队列进行监听,并创建 Handler 对各种事件进行处理
    • 当连接上有新事件发生的时候,SubReactor 就会调用对应的 Handler 处理
    • Handler 通过 read 从连接上读取请求数据,将请求数据分发给 Worker 线程池进行业务处理
    • Worker 线程池会分配独立线程来完成真正的业务处理,并将处理结果返回给 Handler。Handler 通过 send向客户端发送响应数据
    • 一个 MainReactor 可以对应多个 SubReactor,即一个 MainReactor 线程可以对应多个SubReactor线程

    优点:

    • MainReactor 线程与 SubReactor 线程的数据交互简单职责明确,MainReactor 线程只需要接收新连接,SubReactor 线程完成后续的业务处理
    • MainReactor 线程与 SubReactor 线程的数据交互简单, MainReactor 线程只需要把新连接传给 SubReactor 线程,SubReactor 线程无需返回数据
    • 多个 SubReactor 线程能够应对更高的并发请求

    缺点:

    这种模式的缺点是编程复杂度较高。但是由于其优点明显,在许多项目中被广泛使用,包括Nginx、Memcached、Netty 等。这种模式也被叫做服务器的 1+M+N 线程模式,即使用该模式开发的服务器包含一个(或多个,1 只是表示相对较少)连接建立线程+M 个 IO 线程+N 个业务处理线程。这是业界成熟的服务器程序设计模式。

    3.2.4 Netty线程模型

    Netty 的设计主要基于主从 Reactor 多线程模式,并做了一定的改进。

    1. 简单版Netty模型

    在这里插入图片描述

    • BossGroup 线程维护 Selector,ServerSocketChannel 注册到这个 Selector上,只关注连接建立请求事件(主 Reactor)
    • 当接收到来自客户端的连接建立请求事件的时候,通过ServerSocketChannel.accept 方法获得对应的SocketChannel,并封装成 NioSocketChannel 注册到 WorkerGroup 线程中的Selector,每个Selector 运行在一个线程中(从 Reactor)
    • 当 WorkerGroup 线程中的 Selector 监听到自己感兴趣的 IO 事件后,就调用 Handler 进行处理
    1. 进阶版Netty模型
      在这里插入图片描述
    • 有两组线程池:BossGroup 和 WorkerGroup,BossGroup 中的线程专门负责和客户端建立连接,WorkerGroup中的线程专门负责处理连接上的读写

    • BossGroup 和 WorkerGroup 含有多个不断循环的执行事件处理的线程,每个线程都包含一个Selector,用于监听注册在其上的 Channel

    • 每个 BossGroup 中的线程循环执行以下三个步骤

    • 轮训注册在其上的 ServerSocketChannel 的 accept 事件(OP_ACCEPT 事件)
    • 处理 accept 事件,与客户端建立连接,生成一个 NioSocketChannel,并将其注册到WorkerGroup 中某个线程上的 Selector 上
    • 再去以此循环处理任务队列中的下一个事件
    • 每个 WorkerGroup 中的线程循环执行以下三个步骤
    • 轮训注册在其上的 NioSocketChannel 的 read/write 事件(OP_READ/OP_WRITE 事件)
    • 在对应的 NioSocketChannel 上处理 read/write 事件
    • 再去以此循环处理任务队列中的下一个事件
    1. 详细版Netty模型
      在这里插入图片描述
    • Netty 抽象出两组线程池:BossGroup 和 WorkerGroup,也可以叫做 BossNioEventLoopGroup 和WorkerNioEventLoopGroup。每个线程池中都有NioEventLoop 线程。BossGroup中的线程专门负责和客户端建立连接,WorkerGroup 中的线程专门负责处理连接上的读写。BossGroup 和 WorkerGroup的类型都是NioEventLoopGroup
    • NioEventLoopGroup 相当于一个事件循环组,这个组中含有多个事件循环,每个事件循环就是一个 NioEventLoop
    • NioEventLoop 表示一个不断循环的执行事件处理的线程,每个 NioEventLoop都包含一个Selector,用于监听注册在其上的 Socket 网络连接(Channel)
    • NioEventLoopGroup 可以含有多个线程,即可以含有多个 NioEventLoop
    • 每个 BossNioEventLoop 中循环执行以下三个步骤
    • select:轮训注册在其上的 ServerSocketChannel 的 accept 事件(OP_ACCEPT 事件)
    • processSelectedKeys:处理 accept 事件,与客户端建立连接,生成一个
      NioSocketChannel,并将其注册到某个 WorkerNioEventLoop 上的 Selector 上
    • runAllTasks:再去以此循环处理任务队列中的其他任务
    • 每个 WorkerNioEventLoop 中循环执行以下三个步骤
    • select:轮训注册在其上的 NioSocketChannel 的 read/write 事件
      (OP_READ/OP_WRITE 事件)
    • processSelectedKeys:在对应的 NioSocketChannel 上处理 read/write 事件
    • runAllTasks:再去以此循环处理任务队列中的其他任务
    • 在以上两个processSelectedKeys步骤中,会使用 Pipeline(管道),Pipeline 中引用了Channel,即通过Pipeline 可以获取到对应的 Channel,Pipeline 中维护了很多的处理器(拦截处理器、过滤处理器、自定义处理器等)。

    3.3 核心API介绍

    3.3.1 ChannelHandler及其实现类

    ChannelHandler 接口定义了许多事件处理的方法,我们可以通过重写这些方法去实现具 体的业务逻辑。API 关系如下图所示
    在这里插入图片描述
    Netty开发中需要自定义一个 Handler 类去实现 ChannelHandle接口或其子接口或其实现类,然后通过重写相应方法实现业务逻辑,我们接下来看看一般都需要重写哪些方法

    • public void channelActive(ChannelHandlerContext ctx),通道就绪事件
    • public void channelRead(ChannelHandlerContext ctx, Object
      msg),通道读取数据事件
    • public void channelReadComplete(ChannelHandlerContext ctx) ,数据读取完毕事件
    • public void exceptionCaught(ChannelHandlerContext ctx, Throwable
      cause),通道发生异常事件

    3.3.2 ChannelPipeline

    ChannelPipeline 是一个 Handler 的集合,它负责处理和拦截 inbound 或者 outbound 的事件和操作,相当于一个贯穿 Netty 的责任链.

    在这里插入图片描述
    如果客户端和服务器的Handler是一样的,消息从客户端到服务端或者反过来,每个Inbound类型或Outbound类型的Handler只会经过一次,混合类型的Handler(实现了Inbound和Outbound的Handler)会经过两次。准确的说ChannelPipeline中是一个ChannelHandlerContext,每个上下文对象中有ChannelHandler.
    InboundHandler是按照Pipleline的加载顺序的顺序执行,OutboundHandler是按照Pipeline的加载顺序,逆序执行

    3.3.3 ChannelHandlerContext

    这 是 事 件 处 理 器 上 下 文 对 象 , Pipeline 链 中 的 实 际 处 理 节 点 。 每 个 处 理 节 点ChannelHandlerContext 中 包 含 一 个 具 体 的 事 件 处 理 器 ChannelHandler ,同时ChannelHandlerContext 中也绑定了对应的 ChannelPipeline和 Channel 的信息,方便对ChannelHandler 进行调用。常用方法如下所示:

    • ChannelFuture close(),关闭通道
    • ChannelOutboundInvoker flush(),刷新
    • ChannelFuture writeAndFlush(Object msg) , 将 数 据 写 到 ChannelPipeline 中当 前ChannelHandler 的下一个 ChannelHandler 开始处理(出站)

    3.3.4 ChannelOption

    Netty 在创建 Channel 实例后,一般都需要设置 ChannelOption 参数。ChannelOption 是 Socket 的标准参数,而非 Netty 独创的。常用的参数配置有:

    • ChannelOption.SO_BACKLOG
      对应 TCP/IP 协议 listen 函数中的 backlog参数,用来初始化服务器可连接队列大小。服务端处理客户端连接请求是顺序处理的,所以同一时间只能处理一个客户端连接。多个客户端来的时候,服务端将不能处理的客户端连接请求放在队列中等待处理,backlog 参数指定 了队列的大小。
    • ChannelOption.SO_KEEPALIVE
      一直保持连接活动状态。该参数用于设置TCP连接,当设置该选项以后,连接会测试链接的状态,这个选项用于可能长时间没有数据交流的连接。当设置该选项以后,如果在两小时内没有数据的通信时,TCP会自动发送一个活动探测数据报文

    3.3.5 ChannelFuture

    表示 Channel 中异步 I/O 操作的结果,在 Netty 中所有的 I/O 操作都是异步的,I/O 的调用会直接返回,调用者并不能立刻获得结果,但是可以通过 ChannelFuture 来获取 I/O 操作 的处理状态。
    常用方法如下所示:

    • Channel channel(),返回当前正在进行 IO 操作的通道
    • ChannelFuture sync(),等待异步操作执行完毕,将异步改为同步

    3.3.6 EventLoopGroup和实现类NioEventLoopGroup

    EventLoopGroup 是一组 EventLoop 的抽象,Netty 为了更好的利用多核 CPU 资源,一般 会有多个EventLoop 同时工作,每个 EventLoop 维护着一个 Selector 实例。
    EventLoopGroup 提供 next 接口,可以从组里面按照一定规则获取其中一个 EventLoop 来处理任务。在 Netty 服务器端编程中,我们一般都需要提供两个 EventLoopGroup,例如:BossEventLoopGroup 和WorkerEventLoopGroup。 通常一个服务端口即一个 ServerSocketChannel
    对应一个Selector 和一个EventLoop线程。 BossEventLoop 负责接收客户端的连接并将SocketChannel 交给 WorkerEventLoopGroup 来进 行 IO 处理,如下图所示:
    在这里插入图片描述
    BossEventLoopGroup 通常是一个单线程的 EventLoop,EventLoop 维护着一个注册了ServerSocketChannel 的 Selector 实例,BossEventLoop 不断轮询 Selector 将连接事件分离出来, 通常是 OP_ACCEPT 事件,然后将接收到的 SocketChannel 交给 WorkerEventLoopGroup,WorkerEventLoopGroup 会由 next 选择其中一个 EventLoopGroup 来将这个 SocketChannel 注册到其维护的 Selector 并对其后续的 IO 事件进行处理。
    一般情况下我们都是用实现类NioEventLoopGroup.
    常用方法如下所示:

    • public NioEventLoopGroup(),构造方法,创建线程组
    • public Future<?> shutdownGracefully(),断开连接,关闭线程

    3.3.7 ServerBootstrap和Bootstrap

    ServerBootstrap 是 Netty 中的服务器端启动助手,通过它可以完成服务器端的各种配置;Bootstrap 是 Netty 中的客户端启动助手,通过它可以完成客户端的各种配置。常用方法如下 所示:

    • public ServerBootstrap group(EventLoopGroup parentGroup,
      EventLoopGroupchildGroup), 该方法用于服务器端,用来设置两个 EventLoop
    • public B group(EventLoopGroup group) ,该方法用于客户端,用来设置一个 EventLoop
    • public B channel(Class<? extends C> channelClass),该方法用来设置一个服务器端的通道实现
    • public B option(ChannelOption option, T value),用来给 ServerChannel 添加配置
    • public ServerBootstrap childOption(ChannelOption childOption, T
      value),用来给接收到的通道添加配置
    • public ServerBootstrap childHandler(ChannelHandler
      childHandler),该方法用来设置业务 处理类(自定义的 handler)
    • public ChannelFuture bind(int inetPort) ,该方法用于服务器端,用来设置占用的端口号
    • public ChannelFuture connect(String inetHost, int inetPort)
      ,该方法用于客户端,用来连 接服务器端

    3.3.8 Unpooled类

    这是 Netty 提供的一个专门用来操作缓冲区的工具类,常用方法如下所示:

    • public static ByteBuf copiedBuffer(CharSequence string, Charset
      charset),通过给定的数据 和字符编码返回一个 ByteBuf 对象(类似于 NIO 中的 ByteBuffer 对象)
    展开全文
  • 本文主要对JasonEvans于2006年提出的jemalloc内存分配器的翻译。其中jemalloc是一款多线程安全的内存分配器,具有优良的性能,以及多线程环境下很强的扩展性,适合于大家对分配器的进行深入学习了了解。
  • 远程过程调用(RPC)详解

    万次阅读 2016-07-11 00:12:33
    本文介绍了什么是远程过程调用(RPC),RPC 有哪些常用的方法,RPC 经历了哪些发展阶段,以及比较了各种 RPC 技术的优劣。
  • 解决 RPC 请求处理速度慢的问题07/04/2014本文内容上一次修改主题: 2008-11-12如果您在 MAPI 模式下使用 Microsoft Office,Outlook 会将客户端操作作为客户端和服务器之间的远程过程调用 (RPC) 来执行。...
  • JVM内存模型、相关参数设置与命令查看 JVM内存模型,你看这一篇就够了 - 知乎 (zhihu.com) Java虚拟机—Java8内存模型JVM(整理版) - 牧梦者 - 博客园 (cnblogs.com) JVM入门——JVM内存结构 - 那股泥石流 - ...
  • 缓存服务器梳理

    千次阅读 2022-01-06 16:02:15
    1)RabbitMQ:对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次(集群能动态扩展) 2)RocketMQ:具有高吞吐量、高可用性、适合大规模分布式系统应用的特点(支持的语言较少,语言支持...
  • 远程过程调用(RPC)简介

    千次阅读 2018-09-24 12:19:39
    sockets是客户端/服务器网络通信模型中的基础,它为程序程序之间建立连接、收发信息提供了相对简单的机制(甚至可以使用read/write系统调用),两个程序可以位于同一个主机,也可以位于不同的主机。 然而,这...
  • 分布式系统与RPC概述

    2020-04-22 17:49:56
    分布式系统与RPC概述 目录 分布式系统与RPC概述 1、分布式系统 1.1 分布式系统概念 1.2 分布式系统的特点 1.3 分布式系统的优缺点 1.4系统的发展演变过程 2、RPC概述 2.1 什么叫RPC 2.2 有了Http接口,为...
  • 服务器扩容思路及问题分析

    千次阅读 2021-12-07 00:32:20
    点击关注公众号,回复“1024”获取2TB学习资源!为什么要扩容说人话就是, 无论如何优化性能,能达到的最大值是一定的,对于一个用户量大的应用,可以对服务器进行各种优化,诸如限流、资源隔离...
  • 内存池的思想非常简单,实现却简单,难点在于以下几点: 如何快速分配内存 降低内存碎片率 维护内存池所需的额外空间尽量少 如果考虑效率,我们完全可以将内存分为不同大小的块,然后用链表连接起来,分配的时候...
  • NFS服务器搭建与配置前言一、nfs介绍:1.什么是nfs?2.为什么需要nfs服务器?3.nfs服务器是否是最佳的解决方法?4.存储服务器的优缺点5.nfs解决了什么问题?有什么优缺点?二、具体实验操作:1.环境准备:2.安装nfs的相关...
  • 手撸架构,Netty 与 RPC 面试48问

    千次阅读 2022-01-15 11:15:15
    同步、异步主要针对io数据读写来定义的,读写数据过程中阻塞线程称为异步io,否则,称为同步io。 BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。伪异步IO:将...
  • 转自https://www.ibm.com/developerworks/cn/aix/library/au-aix7memoryoptimize2/index.html简介内存子系统调优中最重要的部分并涉及实际的调优工作。在对系统进行调优之前,必须弄清楚主机系统的实际运行情况。...
  • Netty堆外内存泄露排查与总结

    千次阅读 2018-10-19 10:04:14
    Netty 是一个异步事件驱动的网络通信层框架,用于快速开发高可用高性能的服务端网络框架与客户端程序,它极大地简化了 TCP 和 UDP 套接字服务器等网络编程。 Netty 底层基于 JDK 的 NIO,我们为什么直接基于 JDK ...
  • jvm故障 内存和GC异常处理总结

    千次阅读 2022-01-28 16:24:52
    注意:本文参考 深入理解JVM虚拟机15:Java线上故障排查全套路总结_程序员黄小斜-CSDN博客 内存 内存问题排查起来相对比...JMV中的内存不足,OOM大致可以分为以下几种: unable to create new native thread ..
  • 什么是云服务器ECS?云服务器ECS详解一、前言二、云服务器ECS详解为什么选择云服务器ECS?产品架构产品定价管理工具部署建议相关服务三、写在后面的话 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,...
  • RPC-Python】深入 RPC 客户端设计

    千次阅读 2018-08-12 16:51:03
    RPC 客户端实现起来要比服务器简单,所以我们先讲客户端的实现原理和方法。当然,实现 RPC 客户端也具有一定的挑战性,其核心难点在于客户端往往并不是单线程的,我们需要考虑多线程下如何流畅使用客户端而出现...
  • linux内存基础知识和相关调优方案

    千次阅读 2014-07-09 12:38:03
    计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到...
  • 在面试时,总是会问到JVM的GC机制等问题,这一块算是十分重要的...当需要排查各种内存溢出、内存泄漏时,当垃圾收集成为系统达到高并发量的瓶颈时,就需要对这些“自动化”技术实施必要的监控和调节。 哪些内存需要回收
  • rpc
  • 通过监控发现,每过十五分钟,这两个服务所在的服务器内存就会减少,到一天的时间,整个服务器内存就被耗光,导致两个服务出现异常。两个服务的负责人经过多次分析无果,只能将问题提给我,让我协助分析。 ...
  • 内存泄漏测试命令及程序

    千次阅读 2016-03-16 13:30:08
    测试std::list内存是否泄漏的问题 g++ -o test_list test_list.cpp -lpthread 查看进程占用的方法为: pidof test_list linux系统假设输出进程号:9875 cat /proc/9875/status|grep VmRSS 输出的值为正在使用...
  • Linux内存子系统基础及常用调优参数

    千次阅读 2015-11-02 21:20:09
    内存调优涉及大量计算机操作系统原理知识,包括存储器管理中内存分配策略,基于分页/分段存储管理方式,请求分页/分段存储管理方式,页面置换算法,系统调用,中断机制,进程切换等,本文整合梳理了网络资料及书本...
  • RCF--RPC(远程调用框架)

    千次阅读 2020-11-19 20:27:00
    RPC(Remote Procedure Call Protocol)——远程过程调用协议,是一种通过网络从远程计算机请求服务,就像调用本地方法一样,需要了解底层网络技术的协议。RPC跨越了传输层和应用层,很容易开发分布式应用。 RPC...
  • 如何做到服务的高并发、高可用

    千次阅读 2022-03-16 12:18:45
    什么是程序三高? 1)高并发 高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一。当多个进程或线程同时(或着说在同一段时间内)访问同一资源时会产生并发问题,因此需要通过专门的设计来...
  • 1.问题提示:运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。“0x????????”指令引用的“0x????????”内存。该内存不能为“read”。“0x????????”指令引用的“0x????????”内存,该内存不能为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,623
精华内容 7,849
关键字:

内存不足,程序无法分配必须的内存,rpc服务器不可用