Python系统信息模块Psutil介绍

编程 空心菜 发表了文章 0 个评论 6616 次浏览 2015-09-23 00:52 来自相关话题

         psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU 、内存、磁盘、网络等)信息,它主要应用于系统监控,分析和限制系统资源以及进程的 ...查看全部
py1.jpeg
   
     psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU 、内存、磁盘、网络等)信息,它主要应用于系统监控,分析和限制系统资源以及进程的管理。它可以实现等同于命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OS X、FreeBSD和SunSolaris等操作系统,支持从2.4到3.4的python版本,目前最新版本为2.0.0。
 
    通常我们获取操作系统信息往往采用编写shell脚本来实现,如获取当前系统的物理内存总大小和使用大小,shell命令如下:
物理内存total值: free -m |grep Mem |awk ‘{print $2}’
物理内存used值:free -m |grep Mem | awk ‘{print $3}’
    相比较而言,使用psutil库实现起来就更加简单了。psutil大小单位一般采用字节(Byte),如下:
>>> import psutil
[quote]>> mem = psutil.virtual_memory()
>>> mem.total,mem.used
(8361156608L, 8215703552L)
转换成M为单位的话可以如下:
>>> print mem.total/1024/1024,mem.used/1024/1024
7973 7835


psutil的安装


    centos下:
[root@crh]#yum search python |grep psutil
python26-psutil.x86_64 : A process and system utilities module for Python
所以我只需要yum -y install python26-psutil 就可以了
    源码安装:
[root@crh]#wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz
[root@crh]#tar zxf psutil-2.0.0.tar.gz
[root@crh]#cd psutil-2.0.0
[root@crh]#python setup.py install
安装完成后,进入到python交互模式你可以导入试试。。。。


获取系统性能信息


    采集系统的基本性能信息包括(cpu、内存、磁盘、网络等,可以完整描述当前系统的运行的状态以及质量。psutil模块已经封装好了这些方法,用户可以根据自身的应用场景,调用相应的方法来满足需求,非常简单实用,那我们就开始来学习吧。走起。。。。。
 
1.CPU信息
    Linux操作系统的CPU利用率主要有以下几个部分:
    []User Time, 执行用户进程的时间百分比;[/][]System Time,执行内核进程和中断的时间百分比;[/][]Wait IO, 由于IO等待而让CPU处于idle(空闲)状态的时间百分比;[/][]Idle, CPU处于idle状态的时间百分比。[/]

    我们使用Python的psutil.cpu_times()方法可以非常简单的获取到这些信息,同时也可以获取到CPU的硬件相关的信息,比如CPU的物理个数和逻辑个数,具体看下面的操作例子:
>>> import psutil
>>> psutil.cpu_times() [size=16]使用cpu_items方法获取CPU完整信息[/size]
cputimes(user=202656.94, nice=0.85999999999999999, system=83652.119999999995, idle=10823517.810000001, iowait=1242.27, irq=632.41999999999996, softirq=8720.3500000000004)[/quote]

[quote]>> psutil.cpu_times(percpu=True) #[size=16]#显示所有逻辑CPU的信息,指定percpu=True就好[/size]
[cputimes(user=8798.4200000000001, nice=0.029999999999999999, system=4920.2399999999998, idle=1376294.9399999999, iowait=40.539999999999999, irq=0.01, softirq=24.239999999999998), cputimes(user=35990.419999999998, nice=0.20000000000000001, system=13513.059999999999, idle=1338291.54, iowait=431.29000000000002, irq=95.420000000000002, softirq=1756.3499999999999), cputimes(user=23382.98, nice=0.080000000000000002, system=9391.4300000000003, idle=1356101.8899999999, iowait=102.27, irq=48.829999999999998, softirq=1050.73), cputimes(user=36171.690000000002, nice=0.28999999999999998, system=13764.790000000001, idle=1337939.1399999999, iowait=383.88, irq=91.719999999999999, softirq=1726.6199999999999), cputimes(user=9241.1200000000008, nice=0.070000000000000007, system=5088.5100000000002, idle=1375672.72, iowait=36.68, irq=0.01, softirq=38.950000000000003), cputimes(user=35656.849999999999, nice=0.089999999999999997, system=13522.209999999999, idle=1339042.3700000001, iowait=114.27, irq=84.890000000000001, softirq=1657.29), cputimes(user=17315.099999999999, nice=0.0, system=9599.6100000000006, idle=1362112.8, iowait=28.25, irq=224.88999999999999, softirq=797.25999999999999), cputimes(user=36109.360000000001, nice=0.070000000000000007, system=13855.99, idle=1338251.4299999999, iowait=105.06999999999999, irq=86.640000000000001, softirq=1669.28)][/quote]

[quote]>> psutil.cpu_times().user [size=16]# 获取CPU的但单项数据,如用户的CPU时间比[/size]
202673.82000000001[/quote]

[quote]>> psutil.cpu_count() [size=16]#获取cpu逻辑个数,默认logical=True ****注释如果你的psutil的版本不对的话可能没有cpu_count这个方法[/size][/quote]

8

[quote]>> psutil.cpu_count(logical=False) [size=16]#获取cpu的物理个数[/size][/quote]

1
2.内存信息
    Linux 系统的内存信息涉及total(内存总数)、used(已使用的内存数)、free(空闲内存数)、buffers(缓冲使用数)、cache(缓存使用数)、swap(交换分区使用数)等,分别使用psutil.virtual_memory()与psutil.swap_memory()方法获取到这些信息。
>>> mem = psutil.virtual_memory()  #使用psutil.virtual_memory方法获取内存完整信息

[quote]>> mem[/quote]

svmem(total=8361156608L, available=5626871808L, percent=32.700000000000003, used=8166158336L, free=194998272L, active=2812674048, inactive=4402806784, buffers=290136064L, cached=5141737472)

[quote]>>[/quote]

[quote]>> mem.total/1024/1024 #获取内存总数[/quote]

7973L

[quote]>> mem.free/1024/1024 #获取内存空闲数[/quote]

185L

[quote]>> psutil.swap_memory() #获取swap分区信息[/quote]

sswap(total=8587182080L, used=143360L, free=8587038720L, percent=0.0, sin=0, sout=143360)
3.磁盘信息
    在系统磁盘信息中我们比较关注的是磁盘的利用率和IO信息,其中磁盘利用率使用psutil.disk_usage方法获取。磁盘IO信息包括read_count(读IO数)、write_count(写IO数)、read_bytes(IO读字节数)、write_bytes(IO写字节数)、read_time(磁盘读时间)、write_time(磁盘写时间)等。这些IO信息可以使用psutil.disk_io_counters()获取。
>>> psutil.disk_partitions()        #使用psutil.disk_partions()获取磁盘完整信息

[sdiskpart(device=’/dev/sda2′, mountpoint=’/’, fstype=’ext3′, opts=’rw’), sdiskpart(device=’/dev/sda5′, mountpoint=’/data’, fstype=’ext3′, opts=’rw’), sdiskpart(device=’/dev/sda1′, mountpoint=’/boot’, fstype=’ext3′, opts=’rw’)]

[quote]>> psutil.disk_usage(‘/’) [size=16]使用disk_usage方法指定参数获取指定分区的使用情况。[/size][/quote]

sdiskusage(total=52005134336, used=3963228160, free=45357588480, percent=7.5999999999999996)

[quote]>> psutil.disk_usage(‘/data’) [size=16]使用disk_usage方法指定参数获取指定分区的使用情况。[/size][/quote]

sdiskusage(total=423282647040, used=32194187264, free=369240064000, percent=7.5999999999999996)

[quote]>> psutil.disk_io_counters() #使用psutil.disk_io_counters获取硬盘总的IO个数读写信息[/quote]

sdiskio(read_count=95397, write_count=3333898, read_bytes=1524504064, write_bytes=90824263168, read_time=256049, write_time=20039375)

[quote]>> psutil.disk_io_counters(perdisk=True) [size=16]”perdisk=True” 参数获取单个分区IO个数读写信息[/size][/quote]

{‘sda4′: sdiskio(read_count=5, write_count=0, read_bytes=5120, write_bytes=0, read_time=50, write_time=0), ‘sda5′: sdiskio(read_count=29679, write_count=1161203, read_bytes=594831360, write_bytes=46546737152, read_time=79547, write_time=12518375), ‘sda2′: sdiskio(read_count=65407, write_count=2172728, read_bytes=927507456, write_bytes=44279271424, read_time=175431, write_time=7521025), ‘sda3′: sdiskio(read_count=39, write_count=3, read_bytes=831488, write_bytes=143360, read_time=158, write_time=10), ‘sda1′: sdiskio(read_count=267, write_count=26, read_bytes=1328640, write_bytes=28160, read_time=863, write_time=32)}
4.网络信息
    系统的网络信息和磁盘信息类似,涉及几个关键的点,包括bytes_sent(发送字节数)、bytes_recv(接受字节数)、packets_sent(发送数据包数)、packets_recv(接受数据包数)等。这些网络信息可以使用psutil.net_io_counters()方法获取。
>>> psutil.net_io_counters()     [size=16]使用psutil.net_io_counters获取到网络总的IO信息,默认pernic=False[/size]

snetio(bytes_sent=98373481869, bytes_recv=630483790117, packets_sent=869376956, packets_recv=894221315, errin=0, errout=0, dropin=0, dropout=0)

[quote]>> psutil.net_io_counters(pernic=True) [size=16]pernic=True,输出每个网络接口的IO信息[/size][/quote]

{‘lo': snetio(bytes_sent=1064059797, bytes_recv=1064059797, packets_sent=6473544, packets_recv=6473544, errin=0, errout=0, dropin=0, dropout=0), ‘sit0′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth3′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth2′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth1′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth0′: snetio(bytes_sent=97313244366, bytes_recv=629446229973, packets_sent=862937674, packets_recv=887781757, errin=0, errout=0, dropin=0, dropout=0)}
5.其他一些系统信息
     除了前面介绍的几个获取系统的基本信息的方法,psutil模块还支持获取用户登录、开机时间信息
>>> psutil.users()    #使用psutil.users方法获取当前登陆用户的信息

[suser(name=’root’, terminal=’pts/0′, host=’111.206.162.94′, started=1417013248.0)]

[quote]>> psutil.boot_time() #使用psutil.boot_time方法获取开机时间,默认以linux时间戳返回[/quote]

1415455455.0

[quote]>> import datetime [size=16]#导入datetime模块,格式化时间戳,转换成自然时间格式[/size][/quote]

[quote]>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime(“%Y-%M-%d %H:%M:%S”)[/quote]

‘2014-04-08 22:04:15′


系统进程管理方法


 
    获取当前系统的进程信息,可以让运维得知当前应用程序的运行状态,包括进程的启动时间,查看或设置CPU亲和度,内存使用率,IO信息,socket链接,线程数等。这些信息可以呈现出指定进程是否存活,资源利用情况,为开发人员的代码优化,问题定位提供了很好的数据参考。
 
 1.进程信息
    psutil模块在获取进程信息方面也提供了很好的支持,包括使用psutil.pids()方法获取所有进程PID,使用psutil.Process()方法获取单个进程的名称、路径、状态、系统资源利用率等信息。
>>> psutil.pids()  #获取所有进程的PID

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 105, 116, 117, 118, 119 …… ]

[quote]>> p = psutil.Process(5926) #实例化一个Process对象,参数为一个进程PID[/quote]

[quote]>> p.name() #进程名[/quote]

‘httpd’

[quote]>> p.exe() #进程bin路径[/quote]

‘/usr/local/apache2/bin/httpd’

[quote]>> p.cwd() #进程工作绝对路径目录[/quote]

‘/data/www/crh/monitor’

[quote]>> p.status() #进程状态[/quote]

‘sleeping’

[quote]>> p.create_time() #进程创建时间,时间戳格式[/quote]

1417019136.6400001

[quote]>> p.uids() #进程uid信息[/quote]

puids(real=2, effective=2, saved=2)

[quote]>> p.gids() #进程gid信息[/quote]

pgids(real=2, effective=2, saved=2)

[quote]>> p.cpu_times() # 进程cpu时间信息[/quote]

pcputimes(user=0.68000000000000005, system=0.13)

[quote]>> p.memory_info() #进程内存利用率[/quote]

pmem(rss=9306112, vms=147357696)

[quote]>> p.io_counters() # 进程io信息,包括读写io数以及字节数[/quote]

pio(read_count=8390, write_count=1282, read_bytes=0, write_bytes=311296)

[quote]>> p.connections() #返回打开进程socket的namedutples列表[/quote]

[pconn(fd=3, family=10, type=1, laddr=(‘::’, 8001), raddr=(), status=’LISTEN’)]

[quote]>> p.num_threads() #进程开启线程数[/quote]

1
2.popen类的使用
    psutil提供的popen类的作用是获取用户启动应用程序的信息,以便跟踪程序进程的允许状态。
>>> import psutil

[quote]>> from subprocess import PIPE[/quote]

[size=16]通过psutil的Popen方法启动应用程序,可以跟着应用程序的相关信息[/size]

[quote]>> p = psutil.Popen([“/usr/bin/python”, “-c”, “print (‘hello’)”], stdout=PIPE)[/quote]

[quote]>> p.name()[/quote]

‘python’

[quote]>> p.username()[/quote]

‘root’

[quote]>> p.communicate()[/quote]

(‘hello\n’, None)

[quote]>> p.cpu_times()[/quote]

pcputimes(user=0.02, system=0.060000000000000001)
 psutile更多方法参考:
https://github.com/giampaolo/psutil

模块说明官网:http://pythonhosted.org/psutil/


elasticsearch中文分词插件IK使用

大数据 空心菜 发表了文章 0 个评论 3954 次浏览 2015-09-21 11:40 来自相关话题

ES支持中文的前提是安装正确的分词组件,比如elasticsearch-analysis-ik。 版本支持如下: 安装 # git clo ...查看全部
eslogo.png

ES支持中文的前提是安装正确的分词组件,比如elasticsearch-analysis-ik
版本支持如下:
ik1.png


安装


# git clone https://github.com/medcl/elasticsearch-analysis-ik.git --depth 1
# cd elasticsearch-analysis-ik/
# mvn package
# unzip ./target/releases/elasticsearch-analysis-ik-1.2.9.zip

OR
# git clone https://github.com/medcl/elasticsearch-analysis-ik
# cd elasticsearch-analysis-ik
# mvn compile
# mvn package
# plugin --install analysis-ik --url file:///#{project_path}/elasticsearch-analysis-ik/target/releases/elasticsearch-analysis-ik-1.3.0.zip
zip解压得到5个jar包:
    []- elasticsearch-analysis-ik-1.2.9.jar[/][]- httpclient-4.3.5.jar[/][]- httpcore-4.3.2.jar[/][]- commons-logging-1.1.3.jar[/][]- commons-codec-1.6.jar[/]

 
返回ES目录,新建路径./plugins/analysis-ik并把上述jar包全部移进去。
第二步,把elasticsearch-analysis-ik/config/ik文件夹(IK自带的词典)复制到ES目录的./config路径下。
第三步,在./config/elasticsearch.yml文件的最后加上:
index:
analysis:
analyzer:
ik:
alias: [news_analyzer_ik,ik_analyzer]
type: org.elasticsearch.index.analysis.IkAnalyzerProvider

index.analysis.analyzer.default.type : "ik"

OR
[b]index.analysis.analyzer.ik.type : "ik"[/b]
注意配置分词组件必须在创建索引之前,否则是无效的。


Example


1.create a index
# curl -XPUT http://localhost:9200/index
2.create a mapping
# curl -XPUT http://localhost:9200/index
create a mapping
curl -XPOST http://localhost:9200/index/fulltext/_mapping -d'
{
"fulltext": {
"_all": {
"indexAnalyzer": "ik",
"searchAnalyzer": "ik",
"term_vector": "no",
"store": "false"
},
"properties": {
"content": {
"type": "string",
"store": "no",
"term_vector": "with_positions_offsets",
"indexAnalyzer": "ik",
"searchAnalyzer": "ik",
"include_in_all": "true",
"boost": 8
}
}
}
}'
3.index some docs
# curl -XPOST http://localhost:9200/index/fulltext/1 -d'
{"content":"美国留给伊拉克的是个烂摊子吗"}
'
# curl -XPOST http://localhost:9200/index/fulltext/2 -d'
{"content":"公安部:各地校车将享最高路权"}
'
# curl -XPOST http://localhost:9200/index/fulltext/3 -d'
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
# curl -XPOST http://localhost:9200/index/fulltext/4 -d'
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
'
4.query with highlighting
# curl -XPOST http://localhost:9200/index/fulltext/_search  -d'
{
"query" : { "term" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["", ""],
"post_tags" : ["
", ""],
"fields" : {
"content" : {}
}
}
}
'
Result
{
"took": 14,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 2,
"hits": [
{
"_index": "index",
"_type": "fulltext",
"_id": "4",
"_score": 2,
"_source": {
"content": "中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"
},
"highlight": {
"content": [
"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首 "
]
}
},
{
"_index": "index",
"_type": "fulltext",
"_id": "3",
"_score": 2,
"_source": {
"content": "中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"
},
"highlight": {
"content": [
"均每天扣1艘中国渔船 "
]
}
}
]
}
}

Elasticsearch索引存储类型

大数据 空心菜 发表了文章 0 个评论 9185 次浏览 2015-09-20 16:59 来自相关话题

文件系统存储类型     基于文件系统的存储是默认索引存储方式。有不同的实现或存储类型。最好的一个操作系统的自动选择是:mmapfs使用在Windows的64bit系统上,simplefs使用在windows的32bit系统上,除此之外默认是用(h ...查看全部
eslogo.png


文件系统存储类型
    基于文件系统的存储是默认索引存储方式。有不同的实现或存储类型。最好的一个操作系统的自动选择是:mmapfs使用在Windows的64bit系统上,simplefs使用在windows的32bit系统上,除此之外默认是用(hybrid niofs 和 mmapfs)。
 
    你可以通过修改配置文件elasticsearch.yml来指定存储类型:
index.store.type: niofs
    当然你也可以在创建索引的时候指定:
curl -XPUT localhost:9200/my_index -d '{
"settings": {
"index.store.type": "niofs"
}
}';
    下面是所有支持的不同存储类型:


Simple FS(简单文件系统)


Simplefs类型是一个简单的实现随机访问文件的文件存储系统(映射到Lucene SimpleFsDirectory的)。该实现的并发性能较差(多线程是个瓶颈)。当你需要将索引持久化,最好使用niofs。


NIO FS(NIO文件系统)


niofs类型是通过NIO将分片索引文件写到文件系统上(映射到Lucene NIOFSDirectory)。它允许多线程同时读取文件。不建议在Windows系统上使用,由于SUN JAVA实现上的一个错误。


MMap FS(内存映射文件系统)


mmapfs类型存储分片索引到文件系统上(映射到Lucene MMapDirectory)通过映射文件到内存中(MMAP)。内存映射的过程中将划分出与被映射文件大小一样的虚拟内存空间。使用这个类之前,请确保您有足够的虚拟地址空间。
Linux下虚拟内存设置:
# sysctl -w vm.max_map_count=262144
永久生效:
update the vm.max_map_count setting in /etc/sysctl.conf.
# echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p


Hybrid MMap / NIO FS


默认类型存储碎片索引在文件系统中根据不同的文件类型的文件映射到内存(mmap)或使用Java NIO。目前只Lucene术语字典和doc值文件内存映射到减少对操作系统的影响。所有其他文件都使用Lucene NIOFSDirectory打开。

内存
    内存类型索引存储在主内存,使用Lucene的RamIndexStore。
    
    也有节点级别的设置来控制高速缓存(重要的,当使用直接缓冲区):
estore.png

参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-store.html#store-memory
           https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html#file-descriptors

Apache Couldn't start ErrorLog process

运维 Geek小A 回复了问题 2 人关注 2 个回复 7734 次浏览 2015-09-20 12:39 来自相关话题

mysql的ERROR 2006 (HY000): MySQL server has gone away错误分析

数据库 Ansible 发表了文章 0 个评论 2774 次浏览 2015-09-19 20:43 来自相关话题

MySQL下当我导入一个比较大的SQL文件时出现了ERROR 2006 (HY000): MySQL server has gone away错误,具体情况如下:> ll *.sql -rwxr-xr-x@ 1 bohan staff 2 ...查看全部
MySQL下当我导入一个比较大的SQL文件时出现了ERROR 2006 (HY000): MySQL server has gone away错误,具体情况如下:
>  ll *.sql
-rwxr-xr-x@ 1 bohan staff 27M Mar 26 18:08 91620_all.sql

[quote] mysql test < 91620_all.sql
ERROR 2006 (HY000) at line 17128: MySQL server has gone away
上面可以看到,文件大小为27M导入的时候会报这个错误。
 
错误原因


If you are using the mysql client program, its default max_allowed_packet variable is 16MB. To set a larger value, start mysql like this:


shell> mysql --max_allowed_packet=32M


That sets the packet size to 32MB.


我们通过MySQL相关文档可以发现默认大小是16M。
 
解决方法
所有大于16M的SQL文件都会报这个错误,我们可以直接通过命令后增加--max_allowed_packet=32M解决或者登录MySQL客户端,修改系统变量:
> ssh mysql
mysql> set GLOBAL max_allowed_packet=32[i]1024[/i]1024;
我们也可以通过修改MySQL配置my.cnf文件,在最后一行增加max_allowed_packet=32M就可以了
 
MySQL配置文件的位置:
Windows下 C:\ProgamData\MySQL\MySQL Server5.6
Linux下 /etc/mysql
Mac下通过brew安装 /usr/local/Cellar/mysql/5.6.23
原文地址:开源技术社区分享[/quote]

docker怎么让nginx访问我指定的目录

大数据 koyo 回复了问题 2 人关注 1 个回复 6514 次浏览 2015-09-19 20:26 来自相关话题

R语言学习文档资料大全

学习资源 OpenSkill 发表了文章 0 个评论 2990 次浏览 2015-09-19 17:12 来自相关话题

    现在对R语言感兴趣人的人越来越多,很多人都想快速掌握R语言,然而,由于现在大部分学校没有开设R语言课程,社会上相对培训R语言的机构也较少,导致很多人不知道如何着手学习R语言。     所以这次开源技术社区给大家分享一份R语 ...查看全部
    现在对R语言感兴趣人的人越来越多,很多人都想快速掌握R语言,然而,由于现在大部分学校没有开设R语言课程,社会上相对培训R语言的机构也较少,导致很多人不知道如何着手学习R语言。

    所以这次开源技术社区给大家分享一份R语言资料,希望对你有帮助!
    文档资料下载地址:http://pan.baidu.com/s/1pJwzUxP
 
    开源技术社区QQ群号:372476089  欢迎加入互相学习
    扫码关注微信号:
opsk.jpg

elasticsearch特点介绍

大数据 空心菜 发表了文章 0 个评论 5627 次浏览 2015-09-19 16:07 来自相关话题

    Elasticsearch是分布式,REST风格,搜索和分析系统。具有实时数据,实时分析,分布式,高可用性,多租户,全文搜索,面向文档,冲突管理,自由模式,rest风格API,每个操作的持久性,Apache 2的开源许可证,基于Apache Lucen ...查看全部
es1.jpeg

    Elasticsearch是分布式,REST风格,搜索和分析系统。具有实时数据,实时分析,分布式,高可用性,多租户,全文搜索,面向文档,冲突管理,自由模式,rest风格API,每个操作的持久性,Apache 2的开源许可证,基于Apache Lucene之上的特点。


实时数据


数据流进入的系统后,数据怎么能够快速的可视化。用elasticsearch,所有数据立即可用被搜索和分析。
elasticsearch1.png


实时分析


结合搜索的速度与分析的力量,改变你的关系与你的数据。交互搜索,发现和分析,以获得改善你的产品或简化您的业务。
elasticsearch2.png


分布式


Elasticsearch允许你开始小规模使用,但是随着你使用数据的增长,它可以建立在横向扩展的开箱即用。当你需要更多的容量,只需添加更多的节点,并让集群重组,只需要增加额外的硬件,让集群自动利用额外的硬件。
elasticsearch3.png


高可用


Elasticsearch集群弹性-他们将发现新的或失败的节点,重组和重新平衡数据,确保您的数据是安全的和可访问的。
elasticsearch4.png


多租户


集群可以托管多个索引,可独立或作为一个组进行查询。索引别名允许你过滤视图时添加索引,可以透明地更新您的应用程序。
elasticsearch5.png


全文搜索


Elasticsearch在后台使用Lucene来提供最强大的全文检索,提供任何开源产品的能力。搜索自带的多语言支持,强大的查询语言,地理位置支持,上下文感知的建议,自动完成和搜索片段。
elasticsearch6.png


面向文档


存储复杂的真实世界的实体在Elasticsearch结构化JSON文件。所有的字段都被默认索引,所有的索引可以使用一个单一的查询,以方便快速的返回复杂的结果。
elasticsearch7.png


模式自由


Elasticsearch允许你快速上手。简单的指定一个JSON文档将自动检测数据的结构和类型,创建一个索引,并使你的数据检索。您还拥有完全控制,以自定义您的数据是如何被索引的。
elasticsearch8.png


友好的RESTful API


Elasticsearch是API驱动。几乎任何动作都可以用一个简单的RESTful API使用JSON基于HTTP请求。客户库可使用多种编程语言。
elasticsearch9.png


操作持久化


Elasticsearch把你的数据安全第一。文档改变被记录在群集上的多个节点上的事务日志(transaction logs)中记录,以减少任何数据丢失的机会。
elasticsearch10.png


Apache 2开源许可证


Elasticsearch可以下载,使用和免费修改。它是基于Apache 2的开源许可证,最灵活的开源许可证。
elasticsearch11.png


基于Apache Lucene之上


Apache Lucene是一个用Java编写的高性能,功能齐全信息检索库。elasticsearch内部利用lucene来构建的分布式和分析功能。
elasticsearch12.png


冲突管理


乐观的版本控制,可以使用在需要的地方,多个进程的冲突变化,开放式版本控制可以确保数据不会丢失。
elasticsearch13.png

英文地址:原文地址

elasticsearch不能触碰的配置

大数据 空心菜 发表了文章 0 个评论 3104 次浏览 2015-09-19 14:17 来自相关话题

    有几个elasticsearch的热点配置,似乎没有办法避免调整。我们熟知的:配置按钮都希望被打开。然而把所有的配置项都打开,你觉得就可以息事宁人了吗。这些配置常常被滥用,将会导致糟糕的稳定性和糟糕的性能问题,乃至这两种问题。 ...查看全部
eslogo.png

    有几个elasticsearch的热点配置,似乎没有办法避免调整。我们熟知的:配置按钮都希望被打开。然而把所有的配置项都打开,你觉得就可以息事宁人了吗。这些配置常常被滥用,将会导致糟糕的稳定性和糟糕的性能问题,乃至这两种问题。


垃圾收集器(Garbage Collector)


    在这里简单介绍了垃圾收集器基本认识,JVM使用垃圾收集器来释放回收内存。这个技巧确实是最后一个技巧的延伸,但是值得强调的是:
    不要更改默认的垃圾收集器配置!
Elasticsearh默认的GC是CMS。让GC并发的运行应用程序,以便最大限度的减少暂停时间。然而它有两个stop-the-world阶段,在回收大量的heaps。

尽管有这些缺点,它是目前对于像Elasticsearch低延迟服务器软件的最佳的GC。 官方建议使用CMS。

有一个新的GC叫垃圾第一GC(g1gc)。这个新的GC的设计是为了尽量减少停顿比CMS更大的堆,和操作。它的工作原理是将堆分割成区域,预测区域包含最可回收的空间。通过收集这些区域(第一),它可以最大限度地减少暂停和操作非常大的堆。

听起来很棒!不幸的是,g1gc仍然是新的,和新的漏洞被发现的常规。这些错误通常会导致各种各样的段错误,硬盘崩溃。Lucene的测试套件是残酷的GC算法,似乎g1gc没有扭结的工作了。

我们想总有一天会推荐g1gc,但现在,它只是不够稳定满足Elasticsearch和Lucene的要求





线程池(Threadpoolsedit)


每个人都喜欢好的线程池。不管出于什么原因,人们似乎无法抗拒增加线程数。索引很多?更多线程!搜索很多?更多线程!节点空闲时间95%的时间?更多线程!    

在Elasticsearch默认的线程池的设置是非常明智的。 对于所有的线程池(除了search )的经纬被设置为CPU核心的数量。 如果你有八个核心,你可以同时运行的只有八个线程。 它有道理仅分配八个线程在任何特定的线程池。

搜索得到一个较大的线程池,并且被配置为 # cores * 3

你可能会争辩说,一些线程可以阻止(如在一个磁盘上IO操作),这就是为什么你需要更多的线程。这不是一个问题:在Elasticsearch的磁盘I/O是由Lucene的线程处理,不是Elasticsearch。

此外,合作的线程池通过传递彼此之间的工作。 您不必再担心网络线程阻塞,因为它正在等待磁盘写入。 联网线程都有,因为另一个线程池转交给了工作单位长期得到回网络。

最后,你的程序的计算能力是有限的。 有更多的线程只是迫使处理器切换线程上下文。 处理器可以一次运行只有一个线程,因此当它需要切换到一个不同的线程,它存储了当前的状态(寄存器,等等),并装载另一个线程。 如果你是幸运的,交换机将发生在相同的核心。 如果你运气不好,开关可能会迁移到不同的核心,并要求运输核间通信总线上。

这个上下文切换吃掉周期只需做管理清洁; 估计能挂它高达对现代的CPU为30μs。 所以,除非该线程将被阻塞比为30μs长,极有可能是那个时候会被更好地用刚刚加工和提早完成。

人们通常设置线程池错误的值。 八核的机器,我们已经与60,100,甚至1000个线程运行在整个的configs。 这些设置将让CPU大于得到真正的工作要做。

所以。 下次你要调整一个线程池,请不要。 如果你绝对无法抗拒 ,请保持你的核心数量在心中,也许设置数量增加一倍。 更重要的是仅仅是一种浪费。
原文地址:https://www.elastic.co/guide/en/elasticsearch/guide/current/_don_8217_t_touch_these_settings.html

Nginx源码安装错误分析一则

运维 Geek小A 发表了文章 0 个评论 2677 次浏览 2015-09-19 00:19 来自相关话题

    最近跟一个公司合作,要把我们的应用安装在他们的服务器上,不过问题来了。他们为了他们自己服务器安全,不给我们root权限,只给了我们普通用户权限,所有的程序都要装在规定的路径里,限制可不少。没办法装吧~~~       我登录到服 ...查看全部
nginx_logo.png

    最近跟一个公司合作,要把我们的应用安装在他们的服务器上,不过问题来了。他们为了他们自己服务器安全,不给我们root权限,只给了我们普通用户权限,所有的程序都要装在规定的路径里,限制可不少。没办法装吧~~~
 
    我登录到服务器上一看傻了,rpm -qa 一查 需要的包没装几个。一个个下源码包就装吧~~ 到源码站下载了一大堆包开始装,pcre openssl xml mhash mcrypt等等一步步开始装,磕磕绊绊少什么装什么终于装到了nginx 结果make的时候报错了:
make -f objs/Makefile
make[1]: Entering directory `/data/source/nginx'
cd /usr/local/ufo/lib/pcre \
&& if [ -f Makefile ]; then make distclean; fi \
&& CC="gcc" CFLAGS="-O2 -fomit-frame-pointer -pipe " \
./configure --disable-shared
/bin/sh: ./configure: No such file or directory
make[1]: *** [/usr/local/services/lib/pcre/Makefile] Error 127
make[1]: Leaving directory `/data/source/nginx-0.7.61'
make: *** [build] Error 2
    我明明指定了 pcre的路径啊 我又仔细看了看路径是不是有问题!没问题啊,奇怪了我指定了路径怎么会 出现这样的过程呢 cd /usr/local/ufo/lib/pcre 他去安装目录 运行什么 ./configure 啊!
 
    这时我的一个同事仔细看了看 ./configure --help 然后让我看看下面这条
    原来是这样啊~~嗨
--with-pcre                     force PCRE library usage
--with-pcre=DIR set path to PCRE library sources
    原来这个路径指定的是 源码包所在的路径啊~~~晕,nginx为什么要去自己重现编译pcre 呢?

    指定源码包的路径吧 ./configure ...... --with-pcre=/data/source/pcre

    再次make OK 一切顺利,终于装上了。
 
    我在网上搜索的时候发现很多朋友遇到了这个问题,但是没有什么好的办法 (当然,因为没有root权限是没法安装rpm包的,其实只要装上pcre-devel包就好了)
    
    呵呵,希望遇到这种情况的朋友能看到我的这篇帖子O(∩_∩)O~
    原文地址:开源技术社区转载分享