mqtt qq群 android / ios

mqtt协议交流群 Android/iOS MQTT交流群

 

1422614645298

发表在 Linux | 留下评论

taskset: 让进程运行在指定的CPU

我的Linode十分繁忙,在跑一些密集操作数据库的Rake任务时尤其如此。但我观察发现,Linode服务器的4核CPU,只有第1个核心(CPU#0)非常忙,其他都处于idle状态。

不了解Linux是如何调度的,但目前显然有优化的余地。除了处理正常任务,CPU#0还需要处理每秒网卡中断。因此,若能将CPU#0分担的任务摊派到其他CPU核心上,可以预见,系统的处理能力将有更大的提升。

两个名词

SMP (Symmetrical Multi-Processing):指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。 [更多…]

CPU affinity:中文唤作“CPU亲和力”,是指在CMP架构下,能够将一个或多个进程绑定到一个或多个处理器上运行。[更多…]

一、在Linux上修改进程的“CPU亲和力”

在Linux上,可以通过 taskset 命令进行修改。以Ubuntu为例,运行如下命令可以安装taskset工具。

# apt-get install schedutils

对运行中的进程,文档上说可以用下面的命令,把CPU#1 #2 #3分配给PID为2345的进程:

# taskset -cp 1,2,3 2345

但我尝试没奏效,于是我关掉了MySQL,并用taskset将它启动:

# taskset -c 1,2,3 /etc/init.d/mysql start

对于其他进程,也可如此处理(nginx除外,详见下文)。之后用top查看CPU的使用情况,原来空闲的#1 #2 #3,已经在辛勤工作了。

二、配置nginx绑定CPU

刚才说nginx除外,是因为nginx提供了更精确的控制。

conf/nginx.conf中,有如下一行:

worker_processes  1;

这是用来配置nginx启动几个工作进程的,默认为1。而nginx还支持一个名为worker_cpu_affinity的配置项,也就是说,nginx可以为每个工作进程绑定CPU。我做了如下配置:

worker_processes  3;
worker_cpu_affinity 0010 0100 1000;

这里0010 0100 1000是掩码,分别代表第2、3、4颗cpu核心。

重启nginx后,3个工作进程就可以各自用各自的CPU了。

三、刨根问底

  1. 如果自己写代码,要把进程绑定到CPU,该怎么做?可以用sched_setaffinity函数。在Linux上,这会触发一次系统调用。
  2. 如果父进程设置了affinity,之后其创建的子进程是否会有同样的属性?我发现子进程确实继承了父进程的affinity属性。

四、Windows?

在Windows上修改“CPU亲和力”,可以通过任务管理器搞定。

* 个人感觉,Windows系统中翻译的“处理器关系”比“CPU亲和力”容易理解点儿

—————–

进行了这样的修改后,即使系统负载达到3以上,不带缓存打开blogkid.net首页(有40多次查询)依然顺畅;以前一旦负载超过了1.5,响应就很慢了。效果很明显。

 

linux taskset命令详解

SYNOPSIS
taskset [options] [mask | list ] [pid | command [arg]…]
OPTIONS
-p, –pid
operate on an existing PID and not launch a new task
-c, –cpu-list
specifiy  a  numerical  list of processors instead of a bitmask.
The list may contain multiple items,  separated  by  comma,  and
ranges.  For example, 0,5,7,9-11.
-h, –help
display usage information and exit
-V, –version
output version information and exit

发表在 Linux | 留下评论

android studio 怎么删除 recent projects里的project

选中project delete键删除

发表在 Linux | 留下评论

The following SDK components were not installed: extra-android-m2repository, tools, addon-google_apis-google-21, android-21, sys-img-x86-addon-google_apis-google-21, source-21, extra-google-m2repository

我的解决方式:

打开android studio 进入Preferences—Http Proxy—选择No Proxy

还有我的hosts文件里有如下几项:

203.208.46.146 www.google.com
74.125.113.121 developer.android.com
203.208.46.146 dl.google.com
203.208.46.146 dl-ssl.google.com

 

发表在 Linux | 留下评论

红糖姜茶

最近老公感冒特别严重的,喝了好多冲剂都没有用。又得忙于工作不能抽时间去看病。

还是用家里的土方法吧。

用红糖煲姜,趁热喝上三次大杯。

他说,比没喝的时候就好多了,鼻子没有那么塞了。

嘻嘻,民间的土方法还是有点用的,还能治好感冒呢。

食材

QQ20150119-2

步骤
红糖姜茶的做法步骤1

1.准备食材。

姜泡在水里洗干净。 红糖。

红糖姜茶的做法步骤2

2.把姜切成薄薄的片。

待用。

红糖姜茶的做法步骤3

3.杞子用少量的水浸泡着。

红糖姜茶的做法步骤4

4.把姜放在锅里。

舀上两条羹红糖。

红糖姜茶的做法步骤5

5.放入足量的水。

一次放够。

红糖姜茶的做法步骤6

6.开火。大火煮开,再转小火。

煮七分钟。

红糖姜茶的做法步骤7

7.差不多好的时候。把泡好的杞子也倒进去。

煮开来即可饮用。

红糖姜茶的做法步骤8

8.各位豆亲,如有感冒,不妨试一下哦。

小贴士
姜一定要浸泡在水里洗,才能把缝里的沙土洗干净。
发表在 菜谱 | 4条评论

肉炒豆腐

豆腐味道很独特,而且营养丰富,是我家餐桌上最常见的菜,而且怎么做都好吃,炒菜、炖菜、汤、面条,只要加入豆腐就会变的很美味

食材

QQ20150119-1

步骤
肉炒豆腐的做法步骤1

1.豆腐切片在盐水中煮一下

肉炒豆腐的做法步骤2

2.木耳泡发撕小朵,肉切片,柿子切块,尖椒切片,葱蒜切片

肉炒豆腐的做法步骤3

3.热油下肉炒干水分加入郫县豆瓣酱炒出红油

肉炒豆腐的做法步骤4

4.加入葱蒜、干姜、花椒、大料面、柿子炒香,加少许盐

肉炒豆腐的做法步骤5

5.加尖椒、木耳炒

肉炒豆腐的做法步骤6

6.加豆腐稍微翻匀

肉炒豆腐的做法步骤7

7.加入少许水,加盖焖一会

肉炒豆腐的做法步骤8

8.汤汁收干炒匀出锅即可

小贴士
豆腐用盐水煮一下不容易炒碎,炒的时候要轻微的翻炒,不能快了,否则容易碎了
发表在 菜谱 | 留下评论

解决github push错误The requested URL returned error: 403 Forbidden while accessing

原文链接:http://houzhiqingjava.blog.163.com/blog/static/167399507201472343324562/

[git@AYZ github01]$ git push -u origin master
error: The requested URL returned error: 403 Forbidden while accessing https://github.com/iopqrst/learn20140823.git/info/refs

在要推送项目的文件目录下:

vi .git/config

# 将

  1. [remote “origin”]  
  2.     url = https://github.com/iopqrst/learn20140823.git
修改为:
[remote “origin”]
url = https://iopqrst@github.com/iopqrst/learn20140823.git
发表在 Linux | 留下评论

Android Studio SDK 更新方法

通常情况下,下载Android SDK需要连接谷歌的服务器进行下载,由于国内水深火热的网络,速度基本为0.好在国内也有一个更新的镜像地址。本文章介绍如何在不翻墙的情况下,使用国内镜像地址,更新android sdk.

设置host

首先在etc/hosts中设置hosts,需要管理员权限。使用vim对hosts进行编辑:

1
sudo vim hosts

输入密码后进行编辑,添加如下几行:

1
2
3
4
5
6
7
#Google主页
203.208.46.146 www.google.com
##这行是为了方便打开Android开发官网 现在好像不翻也可以打开
74.125.113.121 developer.android.com
##更新的内容从以下地址下载
203.208.46.146 dl.google.com
203.208.46.146 dl-ssl.google.com

更改Android SDK Manager设置

在Preference中进行设置,修改配置如下:

HTTP Proxy Server: mirrors.neusoft.edu.cn

HTTP Proxy Port: 80

然后勾选强制使用http:

然后就大功告成,可以愉快飞速的下载Android SDK而不用担心翻墙网速等问题啦。

发表在 Linux | 留下评论

Android Studio常用快捷键

Android Studio 是谷歌基于IntelliJ IDEA开发的安卓开发工具,有点类似 eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试,基于Gradle的构建支持。

Android Studio常用快捷键

1. Ctrl+D: 集合了复制和粘贴两个操作,如果有选中的部分就复制选中的部分,并在选中部分的后面
粘贴出来,如果没有选中的部分,就复制光标所在的行,并在此行的下面粘贴出来。
2. Ctrl+空格: 输入代码时按此组合键会列出与之相匹配的类、方法名、成员变量等,起智能提示的作用。
在编辑XML文件一样有用。
3. Ctrl+向下箭头 或Ctrl+向上箭头:在有自动匹配下拉列表时,此快捷键会自动关掉下拉列表,
光标移动到下/上一行。
4. 自动匹配下拉列表的排列方式的切换:在自动匹配下拉列表的右下角有个“π”图标,点击后可选
是按:实用性、字母两种排列方式。
5. Ctrl+斜杠 、Ctrl+shift+斜杠:
Ctrl+斜杠:注释或取消注释当前行或选中的代码块,以双斜杠的方式即“//”
Ctrl+shift+斜杠:注释或取消注释选中的代码块,以“/*……*/”方式注释,
6. Ctrl+shift+Enter:自动匹配相对应的语法结构,比如if,do-while,try-catch等结构。
7. Ctrl+F:搜索
8. Ctrl+句点:在自动匹配下拉列表中,选中第一个item
9. 感叹号:在自动匹配下拉列表中,上下键选中一个返回结果为boolean的item,按感叹号会自动取反:
10. Ctrl+Enter :在自动匹配下拉列表中,在没有选中的item时,默认选中第一个item。
11. Ctrl+shift+A:快速查找android studio中的菜单。
12. Ctrl+N:快速查找类名、文件
13. Ctrl+B:直接跳转到类、方法、成员变量定义的地方。与Ctrl+鼠标左键效果一样
14. Ctrl+Alt+B:查询有哪些类实现了光标所在的接口。
15. Ctrl+Alt+shift+I:检测代码,比如检测一些定义了,但没有使用过的变量或方法。检测的目的是为了提高代码效率。
16.Ctrl+Alt+shift+N :快速打开输入的方法或变量。
17.Ctrl+shift+F7:以高亮的形式标志处一些相关的东西,这里主要由三种情况:1.光标的位置在implement时,
会把类实现了接口的方法名给标志出来;2.光标的位置在return时,会标志出方法的所有退出的地方;
3.光标在try或者throws关键字处时,会标志出会产生异常的语句。
18.shift+鼠标滚动:可实现编辑界面的横向滚动。
19.Ctrl+Alt+V:调用方法时传入的参数是比较复杂的表达式时,可用此组合键重构变量,以简化代码的复杂度。
在组合键之前要先选中表达式。
20. Ctrl+D:比较两个jar文件,在同一工程中,选中两个jar文件,按此组合键
21.Ctrl+O:子类想重写父类的方法时,按此组合键可显示所有父类的方法。接口对应的组合键时Ctrl+I。
22.Ctrl+shift+I:快速查看方法体,想查看一个方法是如何实现的,可把光标移至方法处,按此组合键。
23.Ctrl+Q:把光标移至方法处,按此组合键可快速查看方法的说明文档。
24.Ctrl+~:切换编辑界面的风格,快捷键设计
25.Alt+shift+C:查看工程的最近修改。
26.Ctrl+E:快速查看最近打开打开过的文件。
27.shift+F6:可对类、方法、变量进行重命名,使用的地方会自动更新名字。
28.Alt+F1:快速打开project view、structure view 等查看相应的元素。
29.Ctrl+Alt+F7:查看一个类、方法、成员变量在整个工程中的使用情况。
30.Ctrl+shift+空格:在赋值或者是在方法中要传入参数时,列出类型匹配的方法名、成员变量名。
31.Ctrl+Alt+T:选中一块代码,按此组合键,可快速添加if 、for、try/catch等语句。
32.Ctrl+Tab:打开界面切换窗口,保持按住Ctrl键,选中相应的要打开的窗口。
33.Ctrl+W:选中光标所在的所在的单词(一个成员变量或者是一个方法名),多按一次会选中所在的语句,
再多按一次会选中所在的代码块。。。依次类推,每增加一次会扩大一级选中的范围。

Alt+回车 导入包,自动修正

Ctrl+N   查找类
Ctrl+Shift+N 查找文件
Ctrl+Alt+L  格式化代码
Ctrl+Alt+O 优化导入的类和包
Alt+Insert 生成代码(如get,set方法,构造函数等)
Ctrl+E或者Alt+Shift+C  最近更改的代码
Ctrl+R 替换文本
Ctrl+F 查找文本
Ctrl+Shift+Space 自动补全代码
Ctrl+空格 代码提示
Ctrl+Alt+Space 类名或接口名提示
Ctrl+P 方法参数提示
Ctrl+Shift+Alt+N 查找类中的方法或变量
Alt+Shift+C 对比最近修改的代码

Shift+F6  重构-重命名
Ctrl+Shift+先上键
Ctrl+X 删除行
Ctrl+D 复制行
Ctrl+/ 或 Ctrl+Shift+/  注释(// 或者/*…*/ )
Ctrl+J  自动代码
Ctrl+E 最近打开的文件
Ctrl+H 显示类结构图
Ctrl+Q 显示注释文档
Alt+F1 查找代码所在位置
Alt+1 快速打开或隐藏工程面板
Ctrl+Alt+ left/right 返回至上次浏览的位置
Alt+ left/right 切换代码视图
Alt+ Up/Down 在方法间快速移动定位
Ctrl+Shift+Up/Down 代码向上/下移动。
F2 或Shift+F2 高亮错误或警告快速定位

代码标签输入完成后,按Tab,生成代码。
选中文本,按Ctrl+Shift+F7 ,高亮显示所有该文本,按Esc高亮消失。
Ctrl+W 选中代码,连续按会有其他效果
选中文本,按Alt+F3 ,逐个往下查找相同文本,并高亮显示。
Ctrl+Up/Down 光标跳转到第一行或最后一行下
Ctrl+B 快速打开光标处的类或方法 

最常用快捷键
1.Ctrl+E,可以显示最近编辑的文件列表
2.Shift+Click可以关闭文件
3.Ctrl+[或]可以跳到大括号的开头结尾
4.Ctrl+Shift+Backspace可以跳转到上次编辑的地方
5.Ctrl+F12,可以显示当前文件的结构
6.Ctrl+F7可以查询当前元素在当前文件中的引用,然后按F3可以选择
7.Ctrl+N,可以快速打开类
8.Ctrl+Shift+N,可以快速打开文件
9.Alt+Q可以看到当前方法的声明
10.Ctrl+W可以选择单词继而语句继而行继而函数
11.Alt+F1可以将正在编辑的元素在各个面板中定位
12.Ctrl+P,可以显示参数信息
13.Ctrl+Shift+Insert可以选择剪贴板内容并插入
14.Alt+Insert可以生成构造器/Getter/Setter等
15.Ctrl+Alt+V 可以引入变量。例如把括号内的SQL赋成一个变量
16.Ctrl+Alt+T可以把代码包在一块内,例如try/catch
17.Alt+Up and Alt+Down可在方法间快速移动

下面的不是很有用
18.在一些地方按Alt+Enter可以得到一些Intention Action,例如将”==”改为”equals()”
19.Ctrl+Shift+Alt+N可以快速打开符号
20.Ctrl+Shift+Space在很多时候都能够给出Smart提示
21.Alt+F3可以快速寻找
22.Ctrl+/和Ctrl+Shift+/可以注释代码
23.Ctrl+Alt+B可以跳转到抽象方法的实现
24.Ctrl+O可以选择父类的方法进行重写
25.Ctrl+Q可以看JavaDoc
26.Ctrl+Alt+Space是类名自动完成
27.快速打开类/文件/符号时,可以使用通配符,也可以使用缩写
28.Live Templates! Ctrl+J
29.Ctrl+Shift+F7可以高亮当前元素在当前文件中的使用
30.Ctrl+Alt+Up /Ctrl+Alt+Down可以快速跳转搜索结果
31.Ctrl+Shift+J可以整合两行
32.Alt+F8是计算变量值

发表在 Linux | 留下评论

android动画存在的问题

package com.mtjst.im;

import android.app.Activity;
import android.os.Bundle;

import android.view.View;
import android.view.Window;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private ImageView avatar;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        avatar = (ImageView) findViewById(R.id.avatar);
        button = (Button) findViewById(R.id.button);

        // 动画结束后点击图片并不执行onClick的内容,点击图片原来的位置可以执行
        avatar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_SHORT).show();
            }
        });
        
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                TranslateAnimation animation = new TranslateAnimation(0, 200, 0, 0);
                animation.setDuration(1000);
                animation.setFillAfter(true);
                avatar.startAnimation(animation);
            }
        });
    }
}

 

发表在 android | 留下评论