服务器升级故障及其解决方法

服务器升级故障及其解决方法,第1张

升级原则

1 服务器升级的目的是解决系统某一方面的瓶颈,但是升级的结果不能造成新的系统瓶颈。

升级时应该考虑针对的是服务器哪一方面的瓶颈,但是从应用来说,不能因为简单的升级某一部件,而造成其他性能的瓶颈。简单举一个例子,单CPU服务器可以配置256MB内存,但是如果双CPU服务器配置256MB内存,内存肯定会成为系统的瓶颈。

2 服务器升级的前提是系统硬件配置可以提供用户升级的空间。

服务器的升级是在服务器硬件配置有升级能力的前提下进行的,所以在网络规划的初期,网管人员应该对应用的需求和增长有一个初期的估计,在选择机型时,为今后的扩展预留一定的空间。

3 升级必须针对具体的应用,而不是简单的增加硬件。

服务器的应用往往是专机专用,一台服务器主要针对一种应用,这样当服务器出现性能上的瓶颈时,升级应该是针对这种应用的升级,而不是针对某一种部件。不能认为简单升级单一硬件就可以满足应用对性能的需求。

升级故障及其解决

升级可分为在线升级和离线升级。

1 在线升级:系统在不关机的情况下,升级某一部件,系统不受任何影响。在IA架构服务器上,热插拔硬盘的升级和RAID级别的迁移是不用系统重新启动的。

2 离线升级:系统需要关机,升级需要在不带电的情况下进行。这主要指CPU、内存的升级。例如CPU的升级,无论是扩展CPU还是更换CPU,都建议系统重新安装。扩展CPU时候,尤其单CPU扩展到多CPU,系统需要重新安装SMP内核,这样对于UNIX系统来说需要升级系统内核重新编译,对于Windows系统来说,则需要重新安装操作系统。又比如内存的升级,内存增加后,系统性能参数和数据库应用参数必须进行调整。

升级案例

一台单CPU的数据库应用服务器(支持双CPU系统),随着数据量的增加和客户端人数的增加,系统需要升级,安装的是Unixware操作系统,如何进行?

根据用户的应用分析,需要升级系统中的很多部件,如:CPU、内存、硬盘等。这样的话升级应该包括以下几个步骤:

1 备份系统数据(防止误操作导致系统数据丢失)。

2 断电,离线状态下实现硬件的升级,安装CPU、内存和硬盘,注意保证硬件的规格和原主板硬件的规格一致。

3 重新启动操作系统,增加CPU的License。

4 利用RAID的特性,整合新加入的硬盘。

问题1 :服务器集群简单可以理解为负载均衡 就是多台服务器分担同一个应用任务,但是还要看具体应用是要跑什么然后才能判断能不能实现。比如web服务器(网站服务器)就可以放到群集服务器上,100个人访问的话可以随机分配到3个服务器上,但是看到的内容是一样的感觉就是在一台服务器上。

问题2:云是依托集群来做的。群集是实现云技术的一个基础平台。简单例子:三台服务器可以做成群集架设成云平台,然后经过云平台虚拟出6台或者更多台的虚拟服务器(视你物理服务器的性能来做)

Java8种值得学习优秀技能

1 Git

Git 是 Java 开发人员需要掌握的基础工具之一,每一位 Java 从业者都应该学会用它。Git 使用一套版本控制系统来管理各种项目集合。这是一个完全免费的开源系统,专注干非线性工作流、完整性和速度。分布式扩展:存储库可用来创建开发历史的副本。链接方法: Git 具有基于工具箱的设计,可提供定义明确的模型。

基干工具箱的设计:基于工具箱的设计可减少复合组件。

分布式扩展: 存储库可用来创建开发历史的副本。链接方法:Git 具有基于工具箱的设计,可提供定义明确的模型。

基干工具箱的设计:基于工具箱的设计可减少复合组件。

2Selenium

Java 中的 Selenium Web 驱动程序是 Java 开发人员在 2021 年应该了解的重要技术之一。

Selenium 提供了使用测试框架测试 Web 应用程序的一组工具; Selenium Web 驱动提供了一个开源API。它包括了用于 Web 应用程序的一些自动化特性。Selenium 的关键元素包括:

IDE(集成开发环境)

远程控制 /Selenium10

Web 控制器 /Selenium20/30

Selenium网格

3Jenkins

Jenkins 是源自 JAVA 编程的技术,其开源自动化的持续交付和集成可以自动化软件开发流程,支持多种版本控制工具。

Jenkins的插件可与另一种语言编写的代码集成。以下是你应该选择 Jenkins 的三大原因: 它提供了比其他软件更好的质量;其自动化系统可以管理集成;Jenkins的开发速度要快得多。

4用户友好的 Web 服务

REST 的全称是Representative Translation ofState(表述性状态转移),它代表了一种架构风格,是Java 开发人员必须掌握的知识。它提升了 Web 服务性能,还定义了可伸缩性和性能约束。这是 2022年Java 开发人员最理想的选项之一。

它的可重建 API用于 Web 服务开发中的通信需求。如果你了解 HTML、CSS 等,那么你将从RESTfulWeb 服务中获益匪浅。以下是 RESTful 服务的特性:

基干客户端 - 服务器的架构提供了服务器的管理、部署和托管等特性,还可以帮助用户使用服务和资源。它本质上是一种共享资源的共享计算模型。

5 Spring security

它的主要功能是应用程序身份验证。其 J2EE servlet规范和 EJB规范是JAVA 开发人员常用的两个关键安全特性。

Spring Security 支持多种身份验证模型,并与HTTP、Kerberos、JOSSO、CAS、LDAP 等技术集成。Spring Security 与 Java 深度关联,强烈建议Java 开发人员学习它。

6SpringBoot2

Spring Boot 发布了一个名为 Spring Boot 2的新版本。其中 Spring 框架负责控制,Spring Boot 负责生成具有常规配置的独立解决方案。

它主要依赖JAVA Baseline、BOM 材质和 cradle插件,其自动配置可提供安全性和响应性。它还提供了技术支持并改善了开发体验。它是 JAVA 程序员应了解的基本工具之一,其关键特性包括:

直接部署 Undertow、Jetty 或 Tomcat

减少构建配置,提供依赖项

在 Spring 中创建独立的应用程序

7Angular 或响应式 JS

ReactJS 是一个专门用于 UI开发的 JavaScript库,而 Angular 是一个框架。JAVA 开发人员应该很熟悉这两大关键技术了。微信搜索readdot,关注后回复编程资源,领取各种经典学习资料

Angular 2是开源 We 应用程序框架,Angular 的主要特性包括指令、范围、模板、注解、高级依赖项注入和子路由器: ReactJS 用于开发移动应用程序。ReactJS的主要特性包括与服务器的免费开源侧通信功能等。

8ApacheSpark 和 Kafka

Apache Spark 和 Kafka 是2021年Java开发人员一定要掌握的两项技术;它们在 2018 年底已发布稳定版本。Apache Spark 是用于集群计算的框架已开源。

Spark 提供了用于执行基本 1/0、调度和分派等任务的应用程序接口,并提供了同样开源的流处理平台。特别要提的是 Apache Kafka 代码是 Java 和 Scala 编写的。

Kafka 可以使用一些基本 API,例如 Producer APIConsumer APl、Connector API 和 Stream APl。

Java提高千倍效率小技巧

1、尽量指定类、方法的final修饰符

带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如javalangString,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50%。

2、尽量重用对象。

特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替。由于Java虚拟机不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理,因此,生成过多的对象将会给程序的性能带来很大的影响。

3、尽可能使用局部变量。

调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中速度较快,其他变量,如静态变量、实例变量等,都在堆中创建,速度较慢。另外,栈中创建的变量,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。

4、及时关闭流。

Java编程过程中,进行数据库连接、I/0流操作时务必小心,在使用完毕后,及时关闭以释放资源。因为对这些大对象的操作会造成系统大的开销,稍有不慎,将会导致严重的后果。

5、慎用异常。

异常对性能不利。抛出异常首先要创建一个新的对象Throwable接口的构造函数调用名为filllnStackTrace(的本地同步方法,filllnStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,Java虚拟机就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。异常只能用于错误处理,不应该用来控制程序流程。

6、不要在循环中使用try··catch·,应该把其放在最外层

除非不得已。如果毫无理由地这么写了,只要你的领导资深一点、有强迫症一点,八成就要骂你为什么写出这种垃圾代码来了。

7、不要将数组声明为public static final。

因为这毫无意义,这样只是定义了引用为static final数组的内容还是可以随意改变的,将数组声明为public更是一个安全漏洞,这意味着这个数组可以被外部类所改变。

8、尽量在合适的场合使用单例。

使用单例可以减轻加载的负担、缩短加载的时间、提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面

(1)控制资源的使用,通这线程同步来控制资源的并发访问;

(2)控制实例的产生,以达到节约资源的目的;

(3)控制数据的共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信

9、及时清除不再需要的会话

为了清除不再活动的会话,许多应用服务器都有默认的会话超时时间,一般为30分钟。当应用服务器需要保存更多的会话时,如果内存不足,那么操作系统会把部分数据转移到磁盘,应用服务器也可能根据MRU(最近最频繁使用)算法把部分不活跃的会话转储到磁盘,甚至可能抛出内存不足的异常。如果会话要被转储到磁盘那么必须要先被序列化,在大规模集群中,对对象进行序列化的代价是很昂贵的。因此,当会话不再需要时应当及时调用HttpSession的invalidate()方法清除会话

10、使用同步代码块替代同步方法。

这点在多线程模块中的synchronized锁方法块一文中已经讲得很清楚了,除非能确定一整个方法都是需要进行同步的,否则尽量使用同步代码块,避免对那些不需要进行同步的代码也进行了同步,影响了代码执行效率。

11、将常量声明为static final,并以大写命名

这样在编译期间就可以把这些内容放入常量池中,避免运行期间计算生成常量的值。另外,将常量的名字以大写命名也可以方便区分出常量与变量

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 服务器升级故障及其解决方法

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情