apache的几种工作模式

虽然项目中在使用apache服务器,但是都是配了能用或简单调整下参数以便能够接受高并发,并没有认真深入了解;再加上最近apache使用mpm_event模式,发现占用cpu很高,刚开始还以为是apache,php配置的问题,后来修改了下event参数才恢复正常。

下面我们就先来介绍下常用的prefork和event模式吧

1.prefork

一个非线程的,预派生的模块,这意味着prefork会使用多个子进程,每个子进程只有一个线程来接受请求;每个进程只能处理一个http链接,直到这个链接被释放。

<IfModule mpm_prefork_module>
ServerLimit   20000
StartServers   5
MinSpareServers   5
MaxSpareServers   10
MaxClients   1000
MaxRequestsPerChild 0
</IfModule>
StartServers 5

apache在启动后建立的子进程数,prefork默认为5

MinSpareServers 5

最小空闲进程数,默认为5。当空闲子进程数小于5时,那么apache将会立刻生成新的子进程。

MaxSpareServers 10

最大空闲进程数,默认为10。当空闲子进程数超过10时,那么父进程会杀死多余的子进程,当我们的网站负载过大,可以适当加大MinSpareServers和MaxSpareServers

MaxClients 1000

apache所能接受的http请求数。当请求超过1000时,多余的请求会进入请求队列,直到前面的请求处理完。当我们的服务器剩余资源很多但访问很慢时,我们就要看看这个参数是不是设置太低。当然Maxclients默认值为256,当要增大此值时,也要增加serverlimit,但是serverlimit最大为20000。

apache2.3.1以后的版本MaxClients称为MaxRequestWorkers

MaxRequestPerChild 1000

每个子进程所能接受的最大请求数,当超过1000时会自动销毁,0表示子进程永不销毁,虽然能够接受更多的请求,但可能会造成内存泄漏。

2.event 

prefork和mpm方式在非常繁忙的服务器应用下都有些不足。尽管HTTP的Keepalive方式能减少TCP连接数量和网络负载,但是 Keepalive需要和服务进程或者线程绑定,

这就导致一个繁忙的服务器会耗光所有的线程。 Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击

率时,可用的线程数量就是关键的资源限 制,此时Event MPM方式是最有效的。一个以Worker MPM方式工作的繁忙服务器能够承受每秒好几万次的访问量(例如在大型新闻

服务站点的高峰时),而Event MPM可以用来处理更高负载。值得注意的是,Event MPM不能在安全HTTP(HTTPS)访问下工作

event和work有相同之处,都是通过线程来处理请求;一个父进程建立多个子进程,而子进程又会建立多个线程。

<IfModule mpm_event_module>
    ServerLimit         1000
    StartServers         20
    MinSpareThreads        25
    MaxSpareThreads      1200
    ThreadsPerChild      50
    MaxRequestWorkers    2000
    MaxConnectionsPerChild  1000
</IfModule>
StartServers 20

apache启动后建立20个子进程,由于默认的Serverlimit 为16,当我们StartServers大于16时,会报错“changing ServerLimit to 1000 from original value of 16 not allowed 

during restart”,但是我们可以通过Serverlimit来重新设置,不过需要先停止apache服务再启动,直接restart无效。

MinSpareThreads 25

最小空闲线程数

MaxSpareThreads 1200

最大空闲线程数,这里要注意这个值必须要大于StartServers*ThreadsPerChild=20*50=1000,如若我们MaxSpareThreads 800,小于1000,则

StartServers-MaxSpareThreads/50=4,则有4个进程会被杀掉,我们可以通过top查看,restart后会生成多个进程,当过一会多余的进程会被kill掉

ThreadsPerChild 50

每个进程可以生成50个线程,这里要注意的是默认的ThreadLimit为64,当我们ThreadsPerChild大于64时,会报错“ThreadsPerChild of 500 exceeds ThreadLimit of 64, 

decreasing to match”,但是我们可以通过ThreadLimit来重新设置,不过需要先停止apache服务再启动,直接restart无效。

MaxRequestWorkers 2000

最大数量的工作线程,等于ServerLimit*ThreadPerChild,如果按照默认的ServerLimit=16的话,2000>16*50,日志中会报错“MaxRequestWorkers of 1000 would require 20 

servers and exceed ServerLimit of 16, decreasing to 800”,这时我们需要通过修改ServerLimit,需要先停止apache服务再启动,直接restart无效。

MaxConnectionsPerChild 1000

每个进程所能建立的最大连接数



ps:由于prefork和event是我们常用到的,我就按照自己平时遇到过的问题把参数重新了解了,看来还是基本功不扎实啊。

对了,我们可以通过以上命令来查看httpd到底用了什么模式:

[root@usvr157 apache]$ /usr/local/apache/bin/httpd -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  event.c





  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言 致谢 关于本书 第1 部分 背景和基本原理 1 跳跃中的Hadoop 1.1 什么是Hadoop 1.1.1 Hadoop 的核心组件 1.1.2 Hadoop 生态圈 1.1.3 物理架构 1.1.4 谁在使用Hadoop 1.1.5 Hadoop 的局限性 1.2 运行Hadoop 1.2.1 下载并安装Hadoop 1.2.2 Hadoop 的配置 1.2.3 CLI 基本命令 1.2.4 运行MapReduce 作业 1.3 本章小结 第2 部分 数据逻辑. 2 将数据导入导出Hadoop. 2.1 导入导出的关键要素 2.2 将数据导入Hadoop . 2.2.1 将日志文件导入Hadoop 技术点1 使用Flume 将系统日志文件导入HDFS 2.2.2 导入导出半结构化和二进制文件 技术点2 自动复制文件到HDFS 的机制 技术点3 使用Oozie 定期执行数据导入活动 2.2.3 从数据库中拉数据 技术点4 使用MapReduce 将数据导入数据库 技术点5 使用Sqoop 从MySQL 导入数据 2.2.4 HBase 技术点6 HBase 导入HDFS 技术点7 将HBase 作为MapReduce 的数据源 2.3 将数据导出Hadoop 2.3.1 将数据导入本地文件系统 技术点8 自动复制HDFS 中的文件 2.3.2 数据库 技术点9 使用Sqoop 将数据导入MySQL 2.3.3 Hbase 技术点10 将数据从HDFS 导入HBase 技术点11 使用HBase 作为MapReduce 的数据接收器 2.4 本章小结 3 数据序列化――处理文本文件及其他格式的文件 3.1 了解MapReduce 中的输入和输出 3.1.1 数据输入 3.1.2 数据输出 3.2 处理常见的序列化格式 3.2.1 XML . 技术点12 MapReduce 和XML 3.2.2 JSON . 技术点13 MapReduce 和JSON . 3.3 大数据的序列化格式 3.3.1 比较SequenceFiles、Protocol Buffers、Thrift 和 Avro 3.3.2 Sequence File 技术点14 处理SequenceFile 3.3.3 Protocol Buffers 技术点15 整合Protocol Buffers 和MapReduce . 3.3.4 Thrift . 技术点16 使用Thrift 3.3.5 Avro 技术点17 MapReduce 的下一代数据序列化技术 3.4 自定义文件格式 3.4.1 输入输出格式 技术点18 输入和输出格式为CSV 的文件 3.4.2 output committing 的重要性 3.5 本章小结 第3 部分 大数据模式 4 处理大数据的MapReduce 模式 4.1 Join 4.1.1 Repartition Join 技术点19 优化repartition join 4.1.2 Replicated Join 4.1.3 Semi-join 技术点20 实现semi-join 4.1.4 为你的数据挑选最优的合并策略 4.2 排序 4.2.1 二次排序 技术点21 二次排序的实现 4.2.2 整体并行排序 技术点22 通过多个reducer 对key 进行排序 4.3 抽样 技术点23 蓄水池抽样(reservoir 抽样) 4.4 本章小结 5 优化HDFS 处理大数据的技术 5.1 处理小文件 技术点24 使用Avro 存储大量小文件 5.2 通过压缩提高数据存储效率 技术点25 选择合适的压缩解码器 技术点26 在HDFS、MapReduce、Pig 和Hive 中使用数据压缩 技术点27 在MapReduce、Hive 和Pig 中处理可分割的LZOP 5.3 本章小结 6 诊断和优化性能问题 6.1 衡量MapReduce 和你的环境 6.1.1 提取作业统计信息的工具 6.1.2 监控 6.2 确定性能问题的原因 6.2.1 了解哪些因素会影响MapReduce 作业的性能 6.2.2 map 端异常 技术点28 发现输入数据中的坑 技术点29 确定map 端数据倾斜问题 技术点30 判定map 任务吞吐量 技术点31 小文件 技术点32 不可切割的文件 6.2.3 reduce 端问题 技术点33 reducer 任务数过大或过小 . 技术点34 定位reduce 端数据倾斜问题 技术点35 确定reduce 任务是否存在整体吞吐量过低 技术点36 缓慢的洗牌(shuffle)和排序 . 6.2.4 任务的一般性能问题 技术点37 作业竞争和调度器限制 技术点
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
工具是人类生活中不可或缺的一部分,它们的存在极大地提高了我们的工作效率和生活便利性。下面我将向大家介绍几种常见的工具及其特点。 手机:手机已经成为现代生活中必不可少的一部分,它集通话、短信、上网、拍照、支付等多种功能于一身,可以说是一种全能的智能工具。手机的便捷性和多功能性使其成为现代生活中最重要的工具之一。 电脑:电脑是一种强大的计算和信息处理工具,它可以帮助我们进行各种复杂的计算、数据分析和设计工作。电脑的出现极大地推动了科技和社会的发展,改变了人们的工作和生活方式。 互联网:互联网是一个全球性的网络系统,它连接了世界各地的计算机和设备,使得人们可以随时随地获取信息、交流思想、共享资源。互联网的出现极大地拓宽了人们的视野和思维方式,改变了人们的生活方式和社会结构。 智能家居设备:随着科技的不断发展,智能家居设备也越来越普及。这些设备可以通过智能手机或其他设备远程控制家居设备,如灯光、空调、安防系统等。智能家居设备的出现极大地提高了家居的便利性和安全性。 以上只是一些常见的工具,实际上还有很多其他种类的工具在为人们的生活和工作服务。无论是现代科技还是传统工具,它们都是人类智慧和创造力的结晶,为我们的生活和社会发展做出了巨大的贡献。
1. local模式:在本地运行一个Spark应用程序。在这种模式下,Spark应用程序只能使用本地计算机的资源,无法与其他计算机协同工作。local模式通常用于开发和调试Spark应用程序。 例如,假设我们有一个文本文件,需要对其中的单词进行计数。在local模式下,我们可以使用以下代码: ```scala import org.apache.spark._ import org.apache.spark.SparkContext._ object WordCount { def main(args: Array[String]) { val conf = new SparkConf().setAppName("WordCount").setMaster("local") val sc = new SparkContext(conf) val textFile = sc.textFile("input.txt") val wordCount = textFile.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) wordCount.saveAsTextFile("output.txt") } } ``` 在这个例子中,我们使用`setMaster("local")`来指定Spark应用程序在local模式下运行,只使用本地计算机的资源。 2. standalone模式:在一个独立的Spark集群中运行一个Spark应用程序。在这种模式下,Spark应用程序可以使用整个集群的资源。Spark应用程序可以连接到Spark集群的Master节点,从Master节点获取资源,然后在Worker节点上运行任务。 例如,假设我们有一个文本文件,需要对其中的单词进行计数。在standalone模式下,我们可以使用以下代码: ```scala import org.apache.spark._ import org.apache.spark.SparkContext._ object WordCount { def main(args: Array[String]) { val conf = new SparkConf().setAppName("WordCount").setMaster("spark://master:7077") val sc = new SparkContext(conf) val textFile = sc.textFile("hdfs://input.txt") val wordCount = textFile.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) wordCount.saveAsTextFile("hdfs://output.txt") } } ``` 在这个例子中,我们使用`setMaster("spark://master:7077")`来指定Spark应用程序在standalone模式下运行,连接到Spark集群的Master节点。我们还使用`hdfs://`来指定输入和输出文件的路径,表示这些文件存储在HDFS分布式文件系统中。 3. yarn模式:在一个YARN集群中运行一个Spark应用程序。在这种模式下,Spark应用程序可以使用整个YARN集群的资源。Spark应用程序可以连接到YARN集群的ResourceManager节点,从ResourceManager节点获取资源,然后在NodeManager节点上运行任务。 例如,假设我们有一个文本文件,需要对其中的单词进行计数。在YARN模式下,我们可以使用以下代码: ```scala import org.apache.spark._ import org.apache.spark.SparkContext._ object WordCount { def main(args: Array[String]) { val conf = new SparkConf().setAppName("WordCount") val sc = new SparkContext(conf) val textFile = sc.textFile("hdfs://input.txt") val wordCount = textFile.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) wordCount.saveAsTextFile("hdfs://output.txt") } } ``` 在这个例子中,我们没有使用`setMaster()`来指定Spark应用程序在YARN模式下运行,而是将Spark应用程序打包成一个JAR文件,然后通过`spark-submit`命令提交作业到YARN集群。我们还使用`hdfs://`来指定输入和输出文件的路径,表示这些文件存储在HDFS分布式文件系统中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值