首页 文章 精选 留言 我的

精选列表

搜索[优化],共10005篇文章
优秀的个人博客,低调大师

Docker内核参数优化

对于docker container的调优还是和普通的Linux调优有很大的区别 修改最大文件数(open files) 直接修改 container的 /etc/security/limits.conf无效 正确的做法是(以CentOS host为例) 在host上执行 sudo sh -c 'printf "\nulimit -HSn 999999\n" >> /etc/sysconfig/docker' sudo service docker restart 这样再进入docker container, ulimit -a就可以看到更改了 [root@f258c7598394 /]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 7810 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 999999 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 7810 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited 对于Ubuntu请参考此文 修改tcp/ip变量(sysctl) 如果docker container是以 –net=”host” 方式启动的,那么container和host共用同一个网络堆栈,只需要修改host的配置 sudo sh -c 'printf "\nnet.ipv4.ip_local_port_range = 1024 65535\n" >> /etc/sysctl.conf'; sudo sh -c 'printf "net.ipv4.tcp_tw_recycle = 1\n" >> /etc/sysctl.conf'; sudo sh -c 'printf "net.ipv4.tcp_tw_reuse = 1\n" >> /etc/sysctl.conf'; sudo sh -c 'printf "net.core.rmem_max = 16777216\n" >> /etc/sysctl.conf'; sudo sh -c 'printf "net.core.wmem_max = 16777216\n" >> /etc/sysctl.conf'; sudo sh -c 'printf "net.ipv4.tcp_max_syn_backlog = 4096\n" >> /etc/sysctl.conf'; sudo sh -c 'printf "net.ipv4.tcp_syncookies = 1\n" >> /etc/sysctl.conf'; sudo sh -c 'printf "net.core.somaxconn = 1024\n" >> /etc/sysctl.conf'; sudo sh -c 'printf "net.ipv4.tcp_window_scaling = 1\n" >> /etc/sysctl.conf'; sudo sh -c 'printf "net.ipv4.tcp_rmem = 4096 87380 16777216\n" >> /etc/sysctl.conf'; sudo sh -c 'printf "net.ipv4.tcp_wmem = 4096 16384 16777216\n" >> /etc/sysctl.conf'; sudo sysctl -p; 然后重启docker container生效。 如果docker container不是以 –net=”host” 方式启动的,那么它将有自己独立的网络堆栈。修改host的配置将会无效。在container中又无法直接修改/proc,因为docker会以只读的方式重新挂载/proc/sys。 对于这个问题,可以在container启动的时候将/proc挂载到另一可读写位置,譬如 docker run -ti -v /proc:/writable-proc ubuntu:14.04 /bin/bash 1 然后就可以在container内部进行修改了 echo 1024 65535 > /writable-proc/sys/net/ipv4/ip_local_port_range echo 1 > /writable-proc/sys/net/ipv4/tcp_tw_recycle echo 1 > /writable-proc/sys/net/ipv4/tcp_tw_reuse echo 4096 > /writable-proc/sys/net/ipv4/tcp_max_syn_backlog echo 1 > /writable-proc/sys/net/ipv4/tcp_syncookies echo 1 > /writable-proc/sys/net/ipv4/tcp_window_scaling echo 4096 16384 16777216 > /writable-proc/sys/net/ipv4/tcp_wmem echo 4096 87380 16777216 > /writable-proc/sys/net/ipv4/tcp_rmem echo 16777216 > /writable-proc/sys/net/core/rmem_max echo 16777216 > /writable-proc/sys/net/core/wmem_max echo 1024 > /writable-proc/sys/net/core/somaxconn echo 999999 > /writable-proc/sys/fs/file-max 然后在container中可以查看到修改生效 cat /proc/sys/net/ipv4/ip_local_port_range cat /proc/sys/net/ipv4/tcp_tw_recycle cat /proc/sys/net/ipv4/tcp_tw_reuse cat /proc/sys/net/ipv4/tcp_max_syn_backlog cat /proc/sys/net/ipv4/tcp_syncookies cat /proc/sys/net/ipv4/tcp_window_scaling cat /proc/sys/net/ipv4/tcp_wmem cat /proc/sys/net/ipv4/tcp_rmem cat /proc/sys/net/core/rmem_max cat /proc/sys/net/core/wmem_max cat /proc/sys/net/core/somaxconn cat /proc/sys/fs/file-max 需要注意的是,如果内核版本过低(<3.12), 有些参数是无法修改的 本文转自 南非波波 51CTO博客,原文链接:http://blog.51cto.com/nanfeibobo/1716792,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android性能优化:ViewStub

在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在代码中动态的更改它的可见性。这样的做法的优点是逻辑简单而且控制起来比较灵活。但是它的缺点就是耗费资源。虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性。也就是说,会耗费内存等资源。 推荐的做法是使用Android.view.ViewStub,ViewStub是一个轻量级的View,占用资源非常小的控件。在Inflate布局的时候,只有ViewStub会被初始化,然后当ViewStub被设置为可见的时候(默认是不可见的),或是调用了ViewStub.inflate()的时候,ViewStub所向的布局就才会被Inflate和实例化。 但ViewStub也不是万能的,下面总结下ViewStub能做的事儿和什么时候该用ViewStub,什么时候该用可见性的控制。 首先来说说ViewStub的一些特点: (1) ViewStub只能Inflate一次,之后ViewStub对象会被置为空。按句话说,某个被ViewStub指定的布局被Inflate后,就不会够再通过ViewStub来控制它了。 (2) ViewStub只能用来Inflate一个布局文件,而不是某个具体的View,当然也可以把View写在某个布局文件中。 基于以上的特点,那么可以考虑使用ViewStub的情况有: (1) 在程序的运行期间,某个布局在Inflate后,就不会有变化,除非重新启动。 因为ViewStub只能Inflate一次,之后会被置空,所以无法指望后面接着使用ViewStub来控制布局。所以当需要在运行时不止一次的显示和隐藏某个布局,那么ViewStub是做不到的。这时就只能使用View来控制了。 (2) 想要控制显示与隐藏的是一个布局文件,而非某个View。 因为设置给ViewStub的只能是某个布局文件的Id,所以无法让它来控制某个View。 所以,如果想要控制某个View(如Button或TextView)的显示与隐藏,或者想要在运行时不断的显示与隐藏某个布局或View,只能使用View来控制。 下面来看一个实例 在这个例子中,要显示二种不同的布局,一个是用TextView显示一段文字,另一个则是用ImageView显示一个图片。这二个是在onCreate()时决定是显示哪一个,这里就是应用ViewStub的最佳地点。 先来看看布局,一个是主布局,里面只定义二个ViewStub,一个用来控制TextView一个用来控制ImageView,另外就是一个是为显示文字的做的TextView布局,一个是为ImageView而做的布局: 1<?xmlversion="1.0"encoding="utf-8"?>2<LinearLayout 3xmlns:android="http://schemas.android.com/apk/res/android"4android:orientation="vertical"5android:layout_width="fill_parent"6android:layout_height="fill_parent"7android:gravity="center_horizontal">8<ViewStub 9android:id="@+id/viewstub_demo_text"10android:layout_width="wrap_content"11android:layout_height="wrap_content"12android:layout_marginLeft="5dip"13android:layout_marginRight="5dip"14android:layout_marginTop="10dip"15android:layout="@layout/viewstub_demo_text_layout"/>16<ViewStub 17android:id="@+id/viewstub_demo_image"18android:layout_width="wrap_content"19android:layout_height="wrap_content"20android:layout_marginLeft="5dip"21android:layout_marginRight="5dip"22android:layout="@layout/viewstub_demo_image_layout"/>23</LinearLayout> 1//...2@Override 3publicvoidonCreate(BundlesavedInstanceState){ 4super.onCreate(savedInstanceState); 5setContentView(R.layout.viewstub_demo_activity); 6if((((int)(Math.random()*100))&0x01)==0){ 7ViewStubstub=(ViewStub)findViewById(R.id.viewstub_demo_text);//获取布局8stub.inflate();//实例化910TextViewtext=(TextView)findViewById(R.id.viewstub_demo_textview); 11text.setText("HelloWorld"); 12}else{ 13ViewStubstub=(ViewStub)findViewById(R.id.viewstub_demo_image); 14stub.inflate();1516ImageViewimage=(ImageView)findViewById(R.id.viewstub_demo_imageview); 17image.setImageResource(R.drawable.img); 18} 19}20//... 还有类似新内容、新功能提示,这种只会显示一次,且不会发生变化的ViewStub都是挺适合的 本文转自lzwxx 51CTO博客,原文链接:http://blog.51cto.com/13064681/1948196

优秀的个人博客,低调大师

Android性能与优化

I. 编码习惯 尽量避免分配内存(创建对象) 如果一个方法返回一个String,并且这个方法的返回值始终都是被用来append到一个StringBuffer上,就改为传入StringBuffer直接append上去,避免创建一个短生命周期的临时对象; 如果使用的字符串是截取自某一个字符串,就直接从那个字符串上面substring,不要拷贝一份,因为通过substring虽然创建了新的String对象,但是共享了里面的char数组中的char对象,减少了这块对象的创建; 尽量使用多个一维数组,其性能高于多维数组;int数组性能远大于Integer数组性能; 尽可能static方法 如果你确定不需要访问类成员,让方法static,这样调用时可以提升15%~20%的速度,因为不需要切换对象状态。 尽可能使用常量而非变量* 如果某个参数是常量,别忘了使用

优秀的个人博客,低调大师

HBase写性能优化

一、调整参数 入门级的调优可以从调整参数开始。投入小,回报快。 1. Write Buffer Size 快速配置 设置buffer的容量,例子中设置了6MB的buffer容量。 必须禁止auto flush。 6MB是经验值,可以上下微调以适应不同的写场景。 原理HBase Client会在数据累积到设置的阈值后才提交Region Server。这样做的好处在于可以减少RPC连接次数。同时,我们得计算一下服务端因此而消耗的内存:hbase.client.write.buffer * hbase.regionserver.handler.count。在减少PRC次数和增加服务器端内存之间找到平衡点。 2. RPC Handler 快速配置修改hbase-site.xml的hbase.regionserver.handler.count配置项:hb

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册