
IBM System x3850 X6(3837I01)服务器拥有良好的稳定性和超高的可靠性都能够让用户更加安心的使用。具有x86平台最强大的性能和扩展能力,堪称绝佳的整合平台,适合虚拟化、数据库、ERP等大型任务。
这种问题挺复杂的,有些原因真的很出意料,一般程式化的方法还找不到。
1先用浏览器F12控台查看一下网页加载资源的情况,看是不是某些资源加载慢的缘故。
2如果不是的话, 那就检查一下是不是网络问题。
3如果都不是上面的问题,你再去看下服务器的状况,应该有后台可以看,看下是不是带宽不足。(或者用top,iptraf命令看一下)
4最后还有问题的话看下你php代码是不是有问题,用xhprof看下代码哪里慢。
---------
例1:
服务器: 戴尔 PowerEdge R620 Rack Mount Chassis
今天公司的 web服务器响应异常的慢 平常 200ms 执行完毕的一个action,现在要 2秒多才能执行那个完毕。
之前也出现过这种状况,但再重启之后就一般及解决了。
遍历网上
说是
1、网络原因 2、系统原因 3、硬件原因
首先分析网络原因 我 ping 服务器的 接收到响应要1ms,平常都是小于 1ms
2、系统原因
我查看了任务管理器发现 CPU 横容易就奔向100%了。
4 个cpu 核心 马上冲向顶端持平了。
3、硬件原因
听网上说可能还有一部分磁盘 i/o 也会导致运行速度大减的
2、3 部分当时很着急解决问题没有截图、
下面是今天晚上服务器 恢复正常后的基本空闲时的cpu 状况、和磁盘读取状况
想问一下、普通我这种刀片服务器正常运行时oracle 的一般最高读写速度、为什么怎样找到程序中那个可能正执行死循环的程序
经过之前一天的推测,觉得应该是服务器上的另一个应用服务器,出现了死循环,联系了此程序开发人员让其恢复了上一个版本,问题就没有了。
就是那一个个验证推测麻烦,花了我一天的时间,想直接知道哪里死循环。
经过之前一天的推测,觉得应该是服务器上的另一个应用服务器,出现了死循环,联系了此程序开发人员让其恢复了上一个版本,问题就没有了。
就是那一个个验证推测麻烦,花了我一天的时间,想直接知道哪里死循环。
例2:
我的WIN2003独立服务器(P4 28G/1G的方正商用机,非专业服务器),ACCESS数据库有800多兆,同时在线会员100多人。浏览速度很慢,日发帖从1000多锐减到200多贴,网友怨声载道,不得已才转换到DZ。
转换后DZ的数据库有600多兆。刚开始挺快的,随后升级到DZ61,现在过了才1个多月,服务器响应越来越慢。CPU占用并不高,通常不到20%,内存占用好像也正常。就是经常硬盘灯一直亮(是常亮,不是闪亮),每到这时论坛页面就打不开,有时光显示页面头部,要等很长时间。硬盘灯不常亮的时候速度挺快。
以前是一两天出现一次,后来越来越频繁,现在过不多大会儿就出现一次,简直受不了了。
相信很多人在用windows2003服务器或者vps,而且一开始用,速度都相当的快,但是过了几天速度变慢了很多,也会遇到有时候网站打开卡等现象,即使网站没什么流量也会出现。
有时候就会怀疑是不是我的服务器或者vps很差劲,买到假货了?其实不然。
其实这些问题作祟的都是w3wpexe这个iis进程在捣鬼。
在WINDOWS2003+IIS6下,经常出现w3wp的内存占用不能及时释放,从而导致服务器响应速度很慢。
遇到这些现象,我们可以用以下方法进行解决,不影响网站运营及系统问题。
可以做以下配置修改进行改善:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。同时,设置同时运行的web工作进程数目为1。再设置当内存或者cpu占用超过多少,就自动回收内存。
一般来说就可以解决了。但仍然会出现个别网站因为程序问题,不能正确释放。
那么,怎么样才能找到是哪一个网站的?解决办法:
1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid
2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池
3、到iis中察看该应用程序池对应的网站,就可以了。
第一,GE双排螺旋CT扫描中断。扫描中断是GE双排螺旋CT机的一种常见故障,主要是指该机器在正常工作的过程中突然发生中断,并提示错误代码,通过按回车键,设备扫描仍无法正常进行,重启计算机并查看故障记录文件,显示硬件复位失败[2]。
第二,GE双排螺旋CT不能曝光。GE双排螺旋CT不能曝光也是临床使用设备过程中的一种常见故障,这种故障的出现往往是在进行 *** 作时,CT不能对患者进行曝光,同时会显示报错信息。
第三,图像数据传输故障。这种故故障的发生主要是设备在正常使用过程中会自动退出 *** 作页面,或者不能不能再次进入正常 *** 作页面。针对这种情况,根据维修经验,如果是自动关机现象,可以判断是图像数据库存在问题,其中的原因在于每天使用该设备进行检查的患者有很多,需要在短时间内处理大量的信息数据,这就导致在重建图像时出现速度缓慢或者自动退出,使设备无法正常运行[3]。
第四,图像重建处理器故障。这种现象的发生是设备在正常扫描处理过程中,没有办法获取精准图像。从维修经验来判断,出现这种故障是因为图像重建处理器没有办法进行正常运作,经过反复重启设备后,可以消除错误的log,但是经过1天后,对此进行开机检验发现误差仍然存在[4]。
2维修措施
第一,针对设备扫描中断的现象,先要分析其发生故障的原因,应在故障记录文件中查看故障信息,然后根据机器的运行原理,并结合以往的维修经验,认为是滑环故障。一般滑环故障的发生跟环境有关,多数是因为天气潮湿,导致扫描架里的碳刷和滑环接触部位摩擦产生的碳粉未及时散开,黏附于滑环和碳刷上,使数据无法正常传输而发生异常。因此,针对滑环故障原因,技术人员每个一段时间要对滑环和碳刷设备进行维修,定期清洁滑环和碳刷或者直接更换组件,然后通过调用servce程序中system reset功能查看设备是否能正常运行,如果故障还不能排除,说明扫描中断并不是由滑环引起的[5]。如果关闭DAS供电电源并重启后,机器能正常运行,这说明扫描中断可能是由DAS电源引起的。这时,要对电源进行重新连接和清洁,并再次进行开机关机,或者用万能表测量DAS的各电源值,只有电源值正常,设备扫描时才不会出现中断的现象。
第二,针对GE双排螺旋CT不能曝光的现象,又叫“高压打火”,也就是我们所说的短路,这种情况是因为设备在运行过程中,实际电流大于正常电流。高压的发生是由JEDI油箱产生的,通过电缆传输至球管[6]。可见,这种不能曝光的现象可能是由高压电缆、球管、油箱等任意一个部分引起的。因此,针对以上的原因分析,应对各个部分进行逐一检查和排除。首先,要观察球管和周围情况,查看是否有油迹,如果有,则说明漏油,而漏油表示管套的绝缘性受到影响,高压状态下会对管壁打火。其次,要观察油管和油箱插座等位置是否有高压油情况,如果有高压油渗出说明其没有安装好密封垫,油漏光后会出现无绝缘现象,使得此处与外壳发生异常打火现象,打火现象严重时会造成高压插座接触和碳化现象,或者高压电缆头打碎。因此,针对此故障,我们要注意及其取下残缺的密封垫,并换上新的密封垫,并将新密封垫放置于卡槽内,以防止密封性不严的现象发生。接着,要观察油箱是否打火情况,可以利用冷高压进行排查,将油箱转到90°位置,然后用两条高压电缆从油箱对应部位拔出,将10ml高压油加入油箱的高压插座中,如果出现打火现象,则说明油箱内部的绝缘性比较差[7]。最后,观察高压电缆是否有打火现象,一般情况下如果存在高压现象会发生高压电缆打火现象,为此,我们需要逐一排查各个部位的异常情况,以确保设备能正常运行。
MapReduce从出现以来,已经成为Apache Hadoop计算范式的扛鼎之作。它对于符合其设计的各项工作堪称完美:大规模日志处理,ETL批处理 *** 作等。
随着Hadoop使用范围的不断扩大,人们已经清楚知道MapReduce不是所有计算的最佳框架。Hadoop 2将资源管理器YARN作为自己的顶级组件,为其他计算引擎的接入提供了可能性。如Impala等非MapReduce架构的引入,使平台具备了支持交互式SQL的能力。
今天,Apache Spark是另一种这样的替代,并且被称为是超越MapReduce的通用计算范例。也许您会好奇:MapReduce一直以来已经这么有用了,怎么能突然被取代看毕竟,还有很多ETL这样的工作需要在Hadoop上进行,即使该平台目前也已经拥有其他实时功能。
值得庆幸的是,在Spark上重新实现MapReduce一样的计算是完全可能的。它们可以被更简单的维护,而且在某些情况下更快速,这要归功于Spark优化了刷写数据到磁盘的过程。Spark重新实现MapReduce编程范式不过是回归本源。Spark模仿了Scala的函数式编程风格和API。而MapReduce的想法来自于函数式编程语言LISP。
尽管Spark的主要抽象是RDD(d性分布式数据集),实现了Map,reduce等 *** 作,但这些都不是Hadoop的Mapper或Reducer API的直接模拟。这些转变也往往成为开发者从Mapper和Reducer类平行迁移到Spark的绊脚石。
与Scala或Spark中经典函数语言实现的map和reduce函数相比,原有Hadoop提供的Mapper和Reducer API 更灵活也更复杂。这些区别对于习惯了MapReduce的开发者而言也许并不明显,下列行为是针对Hadoop的实现而不是MapReduce的抽象概念:
· Mapper和Reducer总是使用键值对作为输入输出。
· 每个Reducer按照Key对Value进行reduce。
· 每个Mapper和Reducer对于每组输入可能产生0个,1个或多个键值对。
· Mapper和Reducer可能产生任意的keys和values,而不局限于输入的子集和变换。
Mapper和Reducer对象的生命周期可能横跨多个map和reduce *** 作。它们支持setup和cleanup方法,在批量记录处理开始之前和结束之后被调用。
本文将简要展示怎样在Spark中重现以上过程,您将发现不需要逐字翻译Mapper和Reducer!
作为元组的键值对
假定我们需要计算大文本中每一行的长度,并且报告每个长度的行数。在HadoopMapReduce中,我们首先使用一个Mapper,生成为以行的长度作为key,1作为value的键值对。
public class LineLengthMapper extends
Mapper<LongWritable, Text, IntWritable, IntWritable> {
@Override
protected void map(LongWritable lineNumber, Text line, Context context)
throws IOException, InterruptedException {
contextwrite(new IntWritable(linegetLength()), new IntWritable(1));
}
}
值得注意的是Mappers和Reducers只对键值对进行 *** 作。所以由TextInputFormat提供输入给LineLengthMapper,实际上也是以文本中位置为key(很少这么用,但是总是需要有东西作为Key),文本行为值的键值对。
与之对应的Spark实现:
linesmap(line => (linelength, 1))
Spark中,输入只是String构成的RDD,而不是key-value键值对。Spark中对key-value键值对的表示是一个Scala的元组,用(A,B)这样的语法来创建。上面的map *** 作的结果是(Int,Int)元组的RDD。当一个RDD包含很多元组,它获得了多个方法,如reduceByKey,这对再现MapReduce行为将是至关重要的。
Reduce
reduce()与reduceBykey()
统计行的长度的键值对,需要在Reducer中对每种长度作为key,计算其行数的总和作为value。
public class LineLengthReducer extends
Reducer<IntWritable, IntWritable, IntWritable, IntWritable> {
@Override
protected void reduce(IntWritable length, Iterable<IntWritable> counts,
Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable count : counts) {
sum += countget();
}
contextwrite(length, new IntWritable(sum));
}
}
Spark中与上述Mapper,Reducer对应的实现只要一行代码:
val lengthCounts = linesmap(line => (linelength, 1))reduceByKey(_ + _)
Spark的RDD API有个reduce方法,但是它会将所有key-value键值对reduce为单个value。这并不是Hadoop MapReduce的行为,Spark中与之对应的是ReduceByKey。
另外,Reducer的Reduce方法接收多值流,并产生0,1或多个结果。而reduceByKey,它接受的是一个将两个值转化为一个值的函数,在这里,就是把两个数字映射到它们的和的简单加法函数。此关联函数可以被调用者用来reduce多个值到一个值。与Reducer方法相比,他是一个根据Key来Reduce Value的更简单而更精确的API。
Mapper
map() 与 flatMap()
现在,考虑一个统计以大写字母开头的单词的个数的算法。对于每行输入文本,Mapper可能产生0个,1个或多个键值对。
public class CountUppercaseMapper extends
Mapper<LongWritable, Text, Text, IntWritable> {
@Override
protected void map(LongWritable lineNumber, Text line, Context context)
throws IOException, InterruptedException {
for (String word : linetoString()split(" ")) {
if (CharacterisUpperCase(wordcharAt(0))) {
contextwrite(new Text(word), new IntWritable(1));
}
}
}
}
Spark对应的写法:
linesflatMap(
_split(" ")filter(word => CharacterisUpperCase(word(0)))map(word => (word,1))
)
简单的Spark map函数不适用于这种场景,因为map对于每个输入只能产生单个输出,但这个例子中一行需要产生多个输出。所以,和MapperAPI支持的相比,Spark的map函数语义更简单,应用范围更窄。
Spark的解决方案是首先将每行映射为一组输出值,这组值可能为空值或多值。随后会通过flatMap函数被扁平化。数组中的词会被过滤并被转化为函数中的元组。这个例子中,真正模仿Mapper行为的是flatMap,而不是map。
groupByKey()
写一个统计次数的reducer是简单的,在Spark中,reduceByKey可以被用来统计每个单词的总数。比如出于某种原因要求输出文件中每个单词都要显示为大写字母和其数量,在MapReduce中,实现如下:
public class CountUppercaseReducer extends
Reducer<Text, IntWritable, Text, IntWritable> {
@Override
protected void reduce(Text word, Iterable<IntWritable> counts, Context context)
throws IOException, InterruptedException {
int sum = 0;
for (IntWritable count : counts) {
sum += countget();
}
context
write(new Text(wordtoString()toUpperCase()), new IntWritable(sum));
}
}
但是redeceByKey不能单独在Spark中工作,因为他保留了原来的key。为了在Spark中模拟,我们需要一些更像Reducer API的 *** 作。我们知道Reducer的reduce方法接受一个key和一组值,然后完成一组转换。groupByKey和一个连续的map *** 作能够达到这样的目标:
groupByKey()map { case (word,ones) => (wordtoUpperCase, onessum) }
groupByKey只是将某一个key的所有值收集在一起,并且不提供reduce功能。以此为基础,任何转换都可以作用在key和一系列值上。此处,将key转变为大写字母,将values直接求和。
setup()和cleanup()
在MapReduce中,Mapper和Reducer可以声明一个setup方法,在处理输入之前执行,来进行分配数据库连接等昂贵资源,同时可以用cleanup函数可以释放资源。
public class SetupCleanupMapper extends
Mapper<LongWritable, Text, Text, IntWritable> {
private Connection dbConnection;
@Override
protected void setup(Context context) {
dbConnection = ;
}
@Override
protected void cleanup(Context context) {
dbConnectionclose();
}
}
Spark中的map和flatMap方法每次只能在一个input上 *** 作,而且没有提供在转换大批值前后执行代码的方法,看起来,似乎可以直接将setup和cleanup代码放在Sparkmap函数调用之前和之后:
val dbConnection =
linesmap( dbConnectioncreateStatement() )
dbConnectionclose() // Wrong!
然而这种方法却不可行,原因在于:
· 它将对象dbConnection放在map函数的闭包中,这需要他是可序列化的(比如,通过javaioSerializable实现)。而数据库连接这种对象一般不能被序列化。
· map是一种转换,而不是 *** 作,并且拖延执行。连接对象不能被及时关闭。
· 即便如此,它也只能关闭driver上的连接,而不是释放被序列化拷贝版本分配的资源连接。
事实上,map和flatMap都不是Spark中Mapper的最接近的对应函数,Spark中Mapper的最接近的对应函数是十分重要的mapPartitions()方法,这个方法能够不仅完成单值对单值的映射,也能完成一组值对另一组值的映射,很像一个批映射(bulkmap)方法。这意味着mapPartitions()方法能够在开始时从本地分配资源,并在批映射结束时释放资源。
添加setup方法是简单的,添加cleanup会更困难,这是由于检测转换完成仍然是困难的。例如,这样是能工作的:
linesmapPartitions { valueIterator =>
val dbConnection = // OK
val transformedIterator = valueIteratormap( dbConnection )
dbConnectionclose() // Still wrong! May not have evaluated iterator
transformedIterator
}
一个完整的范式应该看起来类似于:
linesmapPartitions { valueIterator =>
if (valueIteratorisEmpty) {
Iterator[]()
} else {
val dbConnection =
valueIteratormap { item =>
val transformedItem =
if (!valueIteratorhasNext) {
dbConnectionclose()
}
transformedItem
}
}
}
虽然后者代码翻译注定不如前者优雅,但它确实能够完成工作。
flatMapPartitions方法并不存在,然而,可以通过调用mapPartitions,后面跟一个flatMap(a= > a)的调用达到同样效果。
带有setup和cleanup的Reducer对应只需仿照上述代码使用groupByKey后面跟一个mapPartition函数。
别急,等一下,还有更多
MapReduce的开发者会指出,还有更多的还没有被提及的API:
· MapReduce支持一种特殊类型的Reducer,也称为Combiner,可以从Mapper中减少洗牌(shuffled)数据大小。
· 它还支持同通过Partitioner实现的自定义分区,和通过分组Comparator实现的自定义分组。
· Context对象授予Counter API的访问权限以及它的累积统计。
· Reducer在其生命周期内一直能看到已排序好的key 。
· MapReduce有自己的Writable序列化方案。
· Mapper和Reducer可以一次发射多组输出。
· MapReduce有几十个调优参数。
有很多方法可以在Spark中实现这些方案,使用类似Accumulator的API,类似groupBy和在不同的这些方法中加入partitioner参数的方法,Java或Kryo序列化,缓存和更多。由于篇幅限制,在这篇文章中就不再累赘介绍了。
需要指出的是,MapReduce的概念仍然有用。只不过现在有了一个更强大的实现,并利用函数式语言,更好地匹配其功能性。理解Spark RDD API和原来的Mapper和ReducerAPI之间的差异,可以帮助开发者更好地理解所有这些函数的工作原理,以及理解如何利用Spark发挥其优势。
以上就是关于联想ibm服务器 x3850x6 4u机架式服务器配置怎么样全部的内容,包括:联想ibm服务器 x3850x6 4u机架式服务器配置怎么样、服务器响应慢是怎么回事和怎么解决响应速度慢、双排ct提示机架电源关闭怎么回事等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)