当前位置:首页 » 资讯中心 » 周边资讯 » 正文

服务器系统采购预算:根据需求和性能优化成本 (服务器系统采集jar)

在采购服务器系统时,预算是一个至关重要的考虑因素。服务器系统通常是企业IT基础设施的关键组成部分,其性能和可靠性对业务运营至关重要。因此,在分配采购预算时,平衡成本和性能需求非常重要。

根据需求确定预算

确定服务器系统采购预算的第一步是评估您的需求。考虑以下因素:

  • 服务器将用于运行哪些应用程序和服务?
  • 预计的流量和用户数量是多少?
  • 对性能、可靠因素

    除了服务器硬件和软件之外,还有其他预算考虑因素需要考虑,例如:

    • 安装和配置服务。
    • 持续维护和支持。
    • 许可费用和订阅费。
    • 灾难恢复和业务连续性计划。

    通过考虑这些因素,您可以制定一个涵盖所有采购和运营成本的全面预算。

    结论

    服务器系统采购预算是一个多方面的过程,需要仔细考虑需求、性能和成本。通过遵循这些建议,您可以优化预算并选择一个服务器系统,既能满足您的业务目标又能保持在您的预算范围内。


什么是MySql数据库

MySQL数据库:

Linux 环境下的我的世界 1.20.1Fabric 服务器搭建流程及服务器优化方法

搭建Linux环境下的《我的世界》1.20.1 Fabric服务器并进行优化,可以遵循以下步骤:首先,确保使用的是4核18G的腾讯云服务器,以及对Linux系统有基本了解。

在搭建过程中,可以参考之前的经验,总结一套流程,以供日后复用或分享给有需要的用户。

选择作为服务器端,运行在Linux OpenCloudOS上。

搭建前,需要获取服务器的公网IP,供外界连接使用。

系统选择方面,除CentOS、Debian、Ubuntu外,其他Linux系统都适用。

重置密码时确保修改的是root用户的密码。

开放防火墙或安全组中的端口,一般为、和。

如果使用轻量应用型服务器,则只能使用防火墙。

使用Putty通过root账号远程登陆服务器,借助Winscp进行文件管理。

在服务器上安装Java,然后使用mcsmmanager进行服务器实例的控制管理。

mcsm是一个轻量级、免费且开源的平台,支持服务器内容管理与运行。

自动或手动安装mcsm,具体操作方式根据系统识别结果调整。

之后,通过浏览器输入IP地址和端口访问mcsm,创建管理员账号并按照引导设置服务器。

启动服务器命令为:java -Xmx12G =UTF-8 =zh =CN -jar nogui。

配置文件需要在首次开启服务器后调整,确保服务器成功启动。

服务器首次启动时会耗时较长,需耐心等待直至显示“Done”为止。

成功启动后,客户端应能通过服务器IP地址连接。

为提高服务器运行效率,可考虑添加SWAP文件以增加虚拟内存。

这能有效缓解内存溢出问题,给予管理者更多处理时间,并避免服务端直接关闭。

创建SWAP文件的方法如下:在当前目录创建/mnt/swapfile文件,设置大小为1GB,并在服务器上激活swap分区。

检查swap状态和内存使用情况,确保设置服务器重启后生效。

调整swappiness值以优化虚拟内存使用策略。

为了进一步优化服务器运行,可以使用生成的优化启动脚本。

这些脚本通常用于Paper及其他插件端MC服务器,但Fabric服务器同样适用。

调整服务器启动文件名、运行环境、插件端种类和各项优化参数,以匹配服务器需求。

根据具体参数设置生成优化启动脚本,将该脚本复制到服务器的启动目录或直接添加到mcsm的启动命令中。

此外,参考mcmod网站、mcsm文档等资源,获取更多关于《我的世界》服务器优化的信息。

在完成上述步骤后,服务器性能将得到显著提升,提供更流畅的游戏体验。

若有疑问,欢迎在评论区留言。

感谢您的阅读与参考。

Tomcat篇02-整体架构和I/O模型

本文主要包括tomcat服务器的目录结构、工作模式、整体架构、I/O模型以及NIO、NIO2、APR三者的对比介绍。

我们先来看一下tomcat8.5和tomcat9中的home目录中的文件:

可以看到除掉一些说明文件之后,还有7个目录:

实际上除了主目录里有lib目录,在webapps目录下的web应用中的WEB-INF目录下也存在一个lib目录:

两者的区别在于:

● Tomcat主目录下的lib目录:存放的JAR文件 不仅能被Tomcat访问,还能被所有在Tomcat中发布的Java Web应用访问 ● webapps目录下的Java Web应用的lib目录:存放的JAR文件 只能被当前Java Web应用访问

既然有多个lib目录,那么肯定就有使用的优先顺序,Tomcat类加载器的目录加载优先顺序如下:

Tomcat的类加载器负责为Tomcat本身以及Java Web应用加载相关的类。假如Tomcat的类加载器要为一个Java Web应用加载一个类,类加载器会按照以下优先顺序到各个目录中去查找该类的文件,直到找到为止,如果所有目录中都不存在该类的文件,则会抛出异常:

Tomcat不仅可以单独运行,还可以与其他的Web服务器集成,作为其他Web服务器的进程内或进程外的servlet容器。

集成的意义在于:对于不支持运行Java Servlet的其他Web服务器,可通过集成Tomcat来提供运行Servlet的功能。

Tomcat有三种工作模式:

我们先从tomcat的源码目录来分析一下tomcat的整体架构,前面我们配置jsvc运行tomcat的时候,我们知道tomcat中启动运行的最主要的类是 ,那么我们在tomcat的源码中的java目录下的org目录的apache目录可以找到主要的源码的相对应的类。

图中的目录如果画成架构图,可以这样表示:

Tomcat 本质上就是一款Servlet 容器,因此 catalina 才是Tomcat的核心 ,其他模块都是为 catalina 提供支撑的。

单线程阻塞I/O模型是最简单的一种服务器I/O模型,单线程即同时只能处理一个客户端的请求,阻塞即该线程会一直等待,直到处理完成为止。

对于多个客户端访问,必须要等到前一个客户端访问结束才能进行下一个访问的处理,请求一个一个排队,只提供一问一答服务。

如上图所示:这是一个同步阻塞服务器响应客户端访问的时间节点图。

这种模型的特点在于单线程和阻塞I/O。

单线程即服务器端只有一个线程处理客户端的所有请求,客户端连接与服务器端的处理线程比是 n:1 ,它无法同时处理多个连接,只能串行处理连接。

而阻塞I/O是指服务器在读写数据时是阻塞的,读取客户端数据时要等待客户端发送数据并且把操作系统内核复制到用户进程中,这时才解除阻塞状态。

写数据回客户端时要等待用户进程将数据写入内核并发送到客户端后才解除阻塞状态。

这种阻塞带来了一个问题,服务器必须要等到客户端成功接收才能继续往下处理另外一个客户端的请求,在此期间线程将无法响应任何客户端请求。

该模型的特点:它是最简单的服务器模型,整个运行过程都只有一个线程,只能支持同时处理一个客户端的请求(如果有多个客户端访问,就必须排队等待), 服务器系统资源消耗较小,但并发能力低,容错能力差。

多线程阻塞I/O模型在单线程阻塞I/O模型的基础上对其进行改进,加入多线程,提高并发能力,使其能够同时对多个客户端进行响应,多线程的核心就是利用多线程机制为每个客户端分配一个线程。

如上图所示,服务器端开始监听客户端的访问,假如有两个客户端同时发送请求过来,服务器端在接收到客户端请求后分别创建两个线程对它们进行处理,每条线程负责一个客户端连接,直到响应完成。

期间两个线程并发地为各自对应的客户端处理请求 ,包括读取客户端数据、处理客户端数据、写数据回客户端等操作。

这种模型的I/O操作也是阻塞的 ,因为每个线程执行到读取或写入操作时都将进入阻塞状态,直到读取到客户端的数据或数据成功写入客户端后才解除阻塞状态。

尽管I/O操作阻塞,但这种模式比单线程处理的性能明显高了,它不用等到第一个请求处理完才处理第二个,而是并发地处理客户端请求,客户端连接与服务器端处理线程的比例是 1:1 。

多线程阻塞I/O模型的特点:支持对多个客户端并发响应,处理能力得到大幅提高,有较大的并发量,但服务器系统资源消耗量较大,而且如果线程数过多,多线程之间会产生较大的线程切换成本,同时拥有较复杂的结构。

在探讨单线程非阻塞I/O模型前必须要先了解非阻塞情况下套接字事件的检测机制,因为对于单线程非阻塞模型最重要的事情是检测哪些连接有感兴趣的事件发生。

一般会有如下三种检测方式。

当多个客户端向服务器请求时,服务器端会保存一个套接字连接列表中,应用层线程对套接字列表轮询尝试读取或写入。

如果成功则进行处理,如果失败则下次继续。

这样不管有多少个套接字连接,它们都可以被一个线程管理,这很好地利用了阻塞的时间,处理能力得到提升。

但这种模型需要在应用程序中遍历所有的套接字列表,同时需要处理数据的拼接,连接空闲时可能也会占用较多CPU资源,不适合实际使用。

这种方式将套接字的遍历工作交给了操作系统内核,把对套接字遍历的结果组织成一系列的事件列表并返回应用层处理。

对于应用层,它们需要处理的对象就是这些事件,这是一种事件驱动的非阻塞方式。

服务器端有多个客户端连接,应用层向内核请求读写事件列表。

内核遍历所有套接字并生成对应的可读列表readList和可写列表writeList。

readList和writeList则标明了每个套接字是否可读/可写。

应用层遍历读写事件列表readList和writeList,做相应的读写操作。

内核遍历套接字时已经不用在应用层对所有套接字进行遍历,将遍历工作下移到内核层,这种方式有助于提高检测效率。

然而,它需要将所有连接的可读事件列表和可写事件列表传到应用层,假如套接字连接数量变大,列表从内核复制到应用层也是不小的开销。

另外,当活跃连接较少时, 内核与应用层之间存在很多无效的数据副本 ,因为它将活跃和不活跃的连接状态都复制到应用层中。

通过遍历的方式检测套接字是否可读可写是一种效率比较低的方式,不管是在应用层中遍历还是在内核中遍历。

所以需要另外一种机制来优化遍历的方式,那就是 回调函数 。

内核中的套接字都对应一个回调函数,当客户端往套接字发送数据时,内核从网卡接收数据后就会调用回调函数,在回调函数中维护事件列表,应用层获取此事件列表即可得到所有感兴趣的事件。

内核基于回调的事件检测方式有两种

第一种是用 可读列表readList 和 可写列表writeList 标记读写事件, 套接字的数量与 readList 和 writeList 两个列表的长度一样 。

上面两种方式由操作系统内核维护客户端的所有连接并通过回调函数不断更新事件列表,而应用层线程只要遍历这些事件列表即可知道可读取或可写入的连接,进而对这些连接进行读写操作,极大提高了检测效率,自然处理能力也更强。

单线程非阻塞I/O模型最重要的一个特点是,在调用读取或写入接口后立即返回,而不会进入阻塞状态。

虽然只有一个线程,但是它通过把非阻塞读写操作与上面几种检测机制配合就可以实现对多个连接的及时处理,而不会因为某个连接的阻塞操作导致其他连接无法处理。

在客户端连接大多数都保持活跃的情况下,这个线程会一直循环处理这些连接,它很好地利用了阻塞的时间,大大提高了这个线程的执行效率。

单线程非阻塞I/O模型的主要优势体现在对多个连接的管理,一般在同时需要处理多个连接的发场景中会使用非阻塞NIO模式,此模型下只通过一个线程去维护和处理连接,这样大大提高了机器的效率。

一般服务器端才会使用NIO模式,而对于客户端,出于方便及习惯,可使用阻塞模式的套接字进行通信。

在多核的机器上可以通过多线程继续提高机器效率。

最朴实、最自然的做法就是将客户端连接按组分配给若干线程,每个线程负责处理对应组内的连接。

比如有4个客户端访问服务器,服务器将套接字1和套接字2交由线程1管理,而线程2则管理套接字3和套接字4,通过事件检测及非阻塞读写就可以让每个线程都能高效处理。

多线程非阻塞I/O模式让服务器端处理能力得到很大提高,它充分利用机器的CPU,适合用于处理高并发的场景,但它也让程序更复杂,更容易出现问题(死锁、数据不一致等经典并发问题)。

最经典的多线程非阻塞I/O模型方式是Reactor模式。

首先看单线程下的Reactor,Reactor将服务器端的整个处理过程分成若干个事件,例如分为接收事件、读事件、写事件、执行事件等。

Reactor通过事件检测机制将这些事件分发给不同处理器去处理。

在整个过程中只要有待处理的事件存在,即可以让Reactor线程不断往下执行,而不会阻塞在某处,所以处理效率很高。

基于单线程Reactor模型,根据实际使用场景,把它改进成多线程模式。

常见的有两种方式:一种是在耗时的process处理器中引入多线程,如使用线程池;另一种是直接使用多个Reactor实例,每个Reactor实例对应一个线程。

Reactor模式的一种改进方式如下图所示。

其整体结构基本上与单线程的Reactor类似,只是引入了一个线程池。

由于对连接的接收、对数据的读取和对数据的写入等操作基本上都耗时较少,因此把它们都放到Reactor线程中处理。

然而,对于逻辑处理可能比较耗时的工作,可以在process处理器中引入线程池,process处理器自己不执行任务,而是交给线程池,从而在Reactor线程中避免了耗时的操作。

将耗时的操作转移到线程池中后,尽管Reactor只有一个线程,它也能保证Reactor的高效。

Reactor模式的另一种改进方式如下图所示。

其中有多个Reactor实例,每个Reactor实例对应一个线程。

因为接收事件是相对于服务器端而言的,所以客户端的连接接收工作统一由一个accept处理器负责,accept处理器会将接收的客户端连接均匀分配给所有Reactor实例,每个Reactor实例负责处理分配到该Reactor上的客户端连接,包括连接的读数据、写数据和逻辑处理。

这就是多Reactor实例的原理。

Tomcat支持的I/O模型如下表(自8.5/9.0 版本起,Tomcat移除了对BIO的支持),在 8.0 之前 , Tomcat 默认采用的I/O方式为 BIO , 之后改为 NIO。

无论 NIO、NIO2 还是 APR, 在性能方面均优于以往的BIO。

Tomcat中的NIO模型是使用的JAVA的NIO类库,其内部的IO实现是同步的(也就是在用户态和内核态之间的数据交换上是同步机制),采用基于selector实现的异步事件驱动机制(这里的异步指的是selector这个实现模型是使用的异步机制)。

而对于Java来说,非阻塞I/O的实现完全是基于操作系统内核的非阻塞I/O,它将操作系统的非阻塞I/O的差异屏蔽并提供统一的API,让我们不必关心操作系统。

JDK会帮我们选择非阻塞I/O的实现方式。

NIO2和前者相比的最大不同就在于引入了异步通道来实现异步IO操作,因此也叫AIO(Asynchronous I/O)。

NIO.2 的异步通道 APIs 提供方便的、平台独立的执行异步操作的标准方法。

这使得应用程序开发人员能够以更清晰的方式来编写程序,而不必定义自己的 Java 线程,此外,还可通过使用底层 OS 所支持的异步功能来提高性能。

如同其他 Java API 一样,API 可利用的 OS 自有异步功能的数量取决于其对该平台的支持程度。

异步通道提供支持连接、读取、以及写入之类非锁定操作的连接,并提供对已启动操作的控制机制。

Java 7 中用于 Java Platform(NIO.2)的 More New I/O APIs,通过在包中增加四个异步通道类,从而增强了 Java 1.4 中的 New I/O APIs(NIO),这些类在风格上与 NIO 通道 API 很相似。

他们共享相同的方法与参数结构体,并且大多数对于 NIO 通道类可用的参数,对于新的异步版本仍然可用。

主要区别在于新通道可使一些操作异步执行。

异步通道 API 提供两种对已启动异步操作的监测与控制机制。

第一种是通过返回一个对象来实现,它将会建模一个挂起操作,并可用于查询其状态以及获取结果。

第二种是通过传递给操作一个新类的对象, ,来完成,它会定义在操作完毕后所执行的处理程序方法。

每个异步通道类为每个操作定义 API 副本,这样可采用任一机制。

Apache可移植运行时(Apache Portable Runtime,APR) 是Apache HTTP服务器的支持库,最初,APR是作为Apache HTTP服务器的一部分而存在的,后来成为一个单独的项目。

其他的应用程序可以使用APR来实现平台无关性(跨平台)。

APR提供了一组映射到下层操作系统的API,如果操作系统不支持某个特定的功能,APR将提供一个模拟的实现。

这样程序员使用APR编写真正可在不同平台上移植的程序。

顺利安装完成后会显示apr的lib库路径,一般都是 /usr/local/apr/lib

安装完成之后我们还需要修改环境变量和配置参数

这里我们使用的是systemd调用jsvc来启动tomcat,所以我们直接在systemd对应的tomcat的unit文件中的 ExecStart 中添加一个路径参数 =/usr/local/apr/lib 指向apr库的路径:

然后我们在tomcat的home目录下的conf子目录中对文件进行修改

把8080端口对应的配置修改成apr:(其他端口配置也类似)

重启tomcat服务我们从tomcat的日志中就可以看到协议已经从默认的NIO变成了apr。

NIO性能是最差的这是毋庸置疑的,如果是考虑到高并发的情况,显然异步非阻塞I/O模式的NIO2和APR库在性能上更有优势,实际上NIO2的性能表现也和APR不相上下,但是NIO2要求Tomcat的版本要在8.0以上,而APR只需要5.5以上即可,但是APR需要额外配置库环境,相对于内置集成的NIO2来说APR这个操作比较麻烦,两者各有优劣。

具体使用哪个还是需要结合实际业务需求和环境进行测试才能决定。

未经允许不得转载:虎跃云 » 服务器系统采购预算:根据需求和性能优化成本 (服务器系统采集jar)
分享到
0
上一篇
下一篇

相关推荐

联系我们

huhuidc

复制已复制
262730666复制已复制
13943842618复制已复制
262730666@qq.com复制已复制
0438-7280666复制已复制
微信公众号
huyueidc_com复制已复制
关注官方微信,了解最新资讯
客服微信
huhuidc复制已复制
商务号,添加请说明来意
contact-img
客服QQ
262730666复制已复制
商务号,添加请说明来意
在线咨询
13943842618复制已复制
工作时间:8:30-12:00;13:30-18:00
客服邮箱
服务热线
0438-7280666复制已复制
24小时服务热线