【用户留存图源码】【ag共享生鲜柜系统源码】【姜嫄演过心跳源码】dperf源码分析
1.linux查看cpu占用率的码分方法:
2.å¦ä½è¯ä»· react native ios å¼å
3.å¦ä½ä½¿ç¨oprofile对软件åprofiling
4.2G内存环境下MySQL编译安装全攻略2g内存编译mysql
linux查看cpu占用率的方法:
top
top是最常用的查看系统资源使用情况的工具,包括CPU、码分内存等等资源。码分这里主要关注CPU资源。码分
1.1 /proc/loadavg
load average取自/proc/loadavg。码分
9. 9. 8. 3/
前三个数字是码分用户留存图源码1、5、码分分钟内进程队列中平均进程数,码分包括正在运行的码分进程+准备好等待运行的进程。
第四个数字分子表示正在运行的码分进程数,分母是码分进程总数。
最后一个数字是码分最近运行的进程ID号。
其中top取的码分是/proc/loadavg的前三个数。
1.2 top使用
打开top,码分可以指定更新的码分周期。
输入H,打开隐藏的线程;输入1,可以显示单核CPU使用情况。
top -H -b -d 1 -n > top.txt,每个1秒统计一次,ag共享生鲜柜系统源码共次,显示线程细节,并保存到top.txt中。
top采样来源你还依赖于/proc/stat和/proc//stat两个,这两个的详细介绍参考:/proc/stat和/proc//stat。
其中CPU信息对应的含义如下:
us是user的意思,统计nice小于等于0的用户空间进程,也即优先级为~。 ni是nice的意思,统计nice大于0的用户空间进程,也即优先级为~。 sys是system的意思,统计内核态运行时间,不包括中断。 id是idle的意思,几系统处于空闲态。 wa是iowait的意思,统计io等待时间。 hi是姜嫄演过心跳源码hardware interrupt,统计硬件中断时间。 si是software interrupt,统计软中断时间。 最后的st是steal的意思。
perf
通过sudo perf top -s comm,可以查看当前系统运行进程占比。
这里不像top一样区分idle、system、user,这里的占比是各个进程在总运行时间里面占比。
通过sudo perf record记录采样信息,然后通过sudo perf report -s comm。
sar、ksar
sar是System Activity Report的意思,可以用于实时观察当前系统活动,也可以生成历史记录的报告。
要使用sar需要安装sudo apt install sysstat,然后对sysstat进行配置。
sar用于记录统计信息,加油卡系统免费源码ksar用于将记录的信息图形化输出。
ksar下载地址在: github.com/vlsi/ksar/re...
sudo gedit /etc/default/sysstat--------------------------------将 ENABLED=“false“ 改为ENABLED=“true“。 sudo gedit /etc/cron.d/sysstat--------------------------------修改sar的周期等配置。 sudo /etc/init.d/sysstat restart--------------------------------重启sar服务 /var/log/sysstat/--------------------------------------------------sar log存放目录
使用sar记录开机到目前的统计信息到文件sar.txt。
LC_ALL=C sar -A > sar.txt
PS:这里直接使用sar -A,在ksar中无法正常显示。
如下执行java -jar ksar.jar,然后Data->Load from text file...选择保存的sar.txt文件。
得到如下的图表。
还可以通过sar记录一段时间的信息,指定采样周期和采样次数。
这些命令前加上LC_ALL=C之后保存到文件中,都可以在ksar中图形化显示。
collectl、colplot
collectl是一款非常优秀并且有着丰富的命令行功能的实用程序,你可以用它来采集描述当前系统状态的性能数据。
不同于大多数其它的系统监控工具,collectl 并非仅局限于有限的系统度量,相反,qt的源码有多少行它可以收集许多不同类型系统资源的相关信息,如 cpu 、disk、memory 、network 、sockets 、 tcp 、inodes 、infiniband 、 lustre 、memory、nfs、processes、quadrics、slabs和buddyinfo等。
同时collectl还可以替代常用工具,比如top、vmstat、ps、iotop等。
安装collectl:
sudo apt-get install collectl
collectl的使用很简单,默认collectl显示cpu、磁盘、网络信息。
collectl还可以显示更多的子系统信息,如果选项存在对应的大写选项,大写选项表示更细节的设备统计信息。
b – buddy info (内存碎片) c – 所有CPU的合一统计信息;C - 单个CPU的统计信息。 d – 整个文件系统Disk合一统计信息;C - 单个磁盘的统计信息。 f – NFS V3 Data i – Inode and File System j – 显示每个CPU的Interrupts触发情况;J - 显示每个中断详细触发情况。 l – Lustre m – 显示整个系统Memory使用情况;M - 按node显示内存使用情况。 n – 显示整个系统的Networks使用情况;N - 分网卡显示网络使用情况。 s – Sockets t – TCP x – Interconnect y – 对系统所有Slabs (系统对象缓存)使用统计信息;Y - 每个slab使用的详细信息。
collectl --all显示所有子系统的统计信息,包括cpu、终端、内存、磁盘、网络、TCP、socket、文件系统、NFS。
collectl --top可以代替top命令:
collectl --vmstat可以代替vmstat命令:
collectl -c1 -sZ -i:1可以代替ps命令。
collectl和一些处理分析数据工具(比如colmux、colgui、colplot)结合能提供可视化图形。
colplot是collectl工具集的一部分,其将collectl收集的数据在浏览器中图形化展示。
colplot的介绍 在此,相关源码可以再 collectl-utils下载。
解压下载的colplot之后,sudo ./INSTALL安装colplot。
安装之后重启apache服务:
suod systemctl reload apache2 sudo systemctl restart apache2
在浏览器中输入 .0.0.1/colplot/,即可使用colplot。
通过Change Dir选择存放经过collectl -P保存的数据,然后设置Plot细节、显示那些子系统、plot大小等等。
最后Generate Plot查看结果。
å¦ä½è¯ä»· react native ios å¼å
React nativeå åå©ç¨äºFacebookçç°æè½®åï¼æ¯ä¸ä¸ªå¾ä¼ç§çéæä½åï¼å¹¶ä¸æç¸ä¿¡è¿ä¸ªå¢é对å端çäºè§£å¾æ·±å»ï¼å¦åä¸å¯è½è®©Native codeãéå± äºçº¿ãã
对åºå°å端å¼åï¼æ´ä¸ªç³»ç»ç»ææ¯è¿æ ·ï¼
JSX vs HTML
CSS-layout vs css
ECMAScript 6 vs ECMAScript 5
React native View vs DOM
æ éç¼è¯ï¼æå¨ç¬¬ä¸æ¬¡ç¼è¯äºipaè£ å¥½ä»¥åï¼å°±åä¹æ²¡æ´æ°è¿appï¼åªè¦æ´æ°äºç«¯çjs代ç ï¼reloadä¸ä¸ï¼æ´ä¸ªçé¢å°±å ¨åäºã
å¤æ°å¸å±ä»£ç é½æ¯JSXï¼ææNativeç»ä»¶é½æ¯æ ç¾åçï¼è¿å¯¹äºå端ç¨åºåæ¥è¯´ï¼éä½äºä¸å°å¦ä¹ ææ¬ï¼ä¹å¤§å¤§åå°äºä»£ç éãä¸ä¿¡ä½ å¯ä»¥ççJSXç¼è¯åç代ç ã
å¤ç¨Reactç³»ç»ï¼ä¹åå°äºä¸å®å¦ä¹ åå¼åææ¬ï¼æ´éè¦çæ¯å©ç¨äºReactéé¢çåå±ådiffæºå¶ãjså±ä¼ ç»Nativeå±çæ¯ä¸ä¸ªdiffåçjsonï¼ç¶åç±Nativeå°è¿ä¸ªæ°æ®æ å°æçæ£çå¸å±è§å¾ã
css-layoutä¹æ¯ç¹çä¹ç¬ï¼å端å¯ä»¥ç»§ç»ç¨çæçç±»cssæ¹å¼æ¥ç¼åå¸å±ï¼éè¿è¿ä¸ªå·¥å ·è½¬æ¢æconstrainå¸å±ã
ç³»ç»åªæjs-objcçååè°ç¨ï¼å°±æ¯æåçUIç»ä»¶çæ¹æ³éè¿javascritcoreæè webviewï¼ä½çæ¬iOSï¼æ å°å°jsä¸æ¥ï¼æ´ä¸ªè°ç¨è¿ç¨æ¯å¼æ¥çï¼è¿æ ·ç设计令React nativeå¯ä»¥è®©jsè¿è¡å¨æ¡é¢chromeä¸ï¼éè¿websocketè¿æ¥Native codeåæ¡é¢chromeï¼æ大å°æ¹ä¾¿äºè°è¯ãå¯¹å ¶ä¸çæºå¶Bangçä¸ç¯æç« åå¾å¾è¯¦ç»ï¼æå°±ä¸æ¾äººçæ §äºï¼React Nativeéä¿¡æºå¶è¯¦è§£ « bangâs blog ãä½è¿æ ·è®¾è®¡ä¹ä¼å¸¦æ¥ä¸äºé®é¢ï¼åé¢è¯´ã
ç¹ææä½ä¹è¢«æ½è±¡æäºä¸ç»ç»ä»¶ï¼TouchableXXXï¼ï¼è¿ç§æ½è±¡æ¹å¼æ¯æå¨ä¹åå类似工ä½ä¸æ²¡ææ³å°çãfacebookè¿ååºNative为ä»ä¹åwebãææãä¸åçåå ï¼å®æ¶çç¹æåé¦ååæ¶è½åãReact Native è¿å¥ç¸åºæºå¶è®¾è®¡å¾å¾å®åï¼è½åNative codeé£æ ·æ§å¶æ´ä¸ªç¹ææä½çææè¿ç¨ã
Debugç¸å½æ¹ä¾¿ï¼ä¿®æ¹äºjs以åï¼éè¿å 建çnodejs watcherç¼è¯æbundleï¼å¨æ¨¡æå¨éé¢æcmd+rå°±å¯ä»¥çå°ææãèä¸æcmd+dï¼å¯ä»¥æå¼ä¸ä¸ªchromeçªå£ï¼ææçjsé½ç§»å°äºchromeéé¢è¿è¡ï¼æ以ä»ä¹æç¹åæ¥æè°ç¨æ ï¼é½ä¸å¨è¯ä¸ã
ä¸é¢çæ¢æ¯ç¹ç¹ä¹æ¯ä¼ç¹ï¼ä¸é¢è¯´è¯´ç¼ºç¹ï¼æè åºè¯¥è¯´ï¼ãä»ç¶éççé®é¢ãï¼å¨æçæ¥ï¼è¿ä¸ªæ¹æ¡å·²ç»è¶ è¶äºHybirdæ¹æ¡ã
ç³»ç»ä»ç¶ï¼ä¸å¾ä¸ï¼ä¾èµåçç»ä»¶æ´é²åºæ¥çç»ä»¶åæ¹æ³ã举两个ä¾åï¼ScrollViewè¿ä¸ªç»ä»¶ï¼å¨Nativeå±æ¯æ大éäºä»¶çï¼scrollViewWillBeginDraggingï¼ scrollViewWillEndDraggingï¼scrollViewDidEndDraggingççï¼è¿äºäºä»¶å¨ç°æççæ¬é½æ²¡ææ´é²ï¼åºæ¬ä¸åä¸äºç»ä»¶èå¨ææãå¦å¤ï¼è¿ä¸ªçæ¬ä¸æ大éç»ä»¶æ¯iOS onlyçï¼ActivityIndicatorIOSãDatePickerIOSãNavigatorIOSãPickerIOSãSliderIOSãSwitchIOSãTabBarIOSãAlertIOSãAppStateIOSãLinkingIOSãPushNotificationIOSãStatusBarIOSãVibrationIOSï¼åè¿æ¥çï¼å©ä½çé½æ¯ä¸äºæ½è±¡ç¨åº¦æ强çåºæ¬ç»ä»¶ãè¿æ ·ï¼ç¨æ·å¿ é¡»å¨ä¸åçå¹³å°ä¸å两å¥ä»£ç ï¼èä¸ææè½åä»ç¶å¼ºçä¾èµ React native å¼å人åæ´é²çæ¥å£ã
ç±äºæå¤å±æ¯Reactï¼å次å¦ä¹ ææ¬é«ï¼ä¸åå¾å¸¸çHybirdæ¹æ¡ï¼åªè¦å¤å¦å 个JS APIå°±å¯ä»¥å¼å§å¹²æ´»äºãå½ç¶ï¼Reactç确让åç»å¼ååå¾ç®åäºä¸äºï¼è¿ä¹ä¸å¥å¤æ¥çï¼åºäºiOSï¼ãæ®ç¼ºä¸å ¨çï¼css-layoutï¼å¨Reactçå è£ ä¸ï¼çç¡®æ¾å¾ä¸é£ä¹é¢ç®å¯æäºã
å¦å¤ï¼React Nativeä»ç¶å¾ä¸å®åãææ¡£è¿ä¸å ¨ï¼æåºæ¬ä¸æ¯ççä»ç示ä¾ä»£ç å®æçdemoï¼éæå°å·²æappçææ¡£ä¹æ¯ä»å¤©æåºæ¥ãæç §å®æ¹ç说æ³ï¼Androidçæ¬è¦å°åå¹´åæåå¸ï¼Blog | React ï¼å±æ¶æ´ä¸ªç³»ç»è®¾è®¡å¯è½è¿ä¼æå¾å¤§çååã
PSï¼å¨ä½¿ç¨Tabbarçæ¶åï¼ææåçåç°ä»ä»¬å± ç¶ç¨äºiconfontæ¹æ¡ï¼æç°å¨æ头ç项ç®ä¸ä¹æåæ ·çå®ç°ï¼ä¸è¿APIæä¹è®¾è®¡ä¸ç´å¾å¤´ç¼ãç»æï¼æåç°ä»æ¯è¿ä¹åçï¼
<TabBarItemIOS
name="blueTab"
icon={ _ix_DEPRECATED('favorites')}
....>
å¨ _ix_DEPRECATED çå®ä¹å¤ï¼æä¸å¥æ³¨éï¼ // TODO(nicklockwood): How can this fit our require system?
以ä¸ã
ä¸é¢æ¯ä¸å¨åï¼å¨React nativeè¿æ²¡å¼æºçæ¶åï¼éè¿å解ipaçä¸äºåæè¿ç¨ï¼æå ´è¶£çå¯ä»¥ççã
------------------------ç®åç²æ´çåå²çº¿--------------------
èæ¯åè°ç æ段
React Nativeè¿æ²¡å¼æºï¼æè¿åç»éå å¼ãåç¼è¯ãäºFacebook Groupï¼è¿ä¸ªåºç¨æ¯ç¨React Nativeå®ç°çï¼çipa代ç ï¼åºæ¥å ç¾ä¸ªJSæ件ï¼æ ¼å¼åä¸ä¸ï¼è±äºå 天æ¶é´è¯»äºä¸ä¸æºç ï¼å¯¹React Nativeçå é¨æ ¸å¿æºå¶ç®æ¯æäºä¸ä¸ªåºæ¬äºè§£ã
React Nativeçæ ¸å¿å®ç°ï¼
å ç®å说å ç¹ï¼è¯¦ç»ççå头æ´æ°ã
1. React Nativeéé¢æ²¡æwebviewï¼è¿è´§ä¸æ¯Hybrid appï¼éé¢æ§è¡JSæ¯ç¨ç
JavascriptCoreã
2. å说React Nativeçæ ¸å¿ï¼iOS Native codeæä¾äºåæ¥ä¸ªæåºæ¬æ ¸å¿çç±»ï¼RCTDeviceEventEmitterãRCTRenderingPerfçï¼ãæç»ä»¶ï¼RCTViewãRCTTextFieldãRCTTextViewãRCTModalFullscreenViewçï¼ï¼ç¶åç±React NativeçJSé¨åï¼ç»æäºåæ¥ä¸ªåºæ¬ç»ä»¶ï¼PopoverãListviewçï¼ï¼äº¤ç±ä¸å±çä¸å¡æ¹æ¥ä½¿ç¨ï¼THGroupViewï¼ã
3. å°±å¦ä»ä»¬å¨å®£ä¼ æ¶æ说ï¼ä»ä»¬å®ç°äºä¸å¥ç±»ä¼¼cssçåéï¼ç¨æ¥è§£å³æ ·å¼é®é¢ï¼ç¸å½å¤æå强大ï¼é è¿ä¸ªæè½å°Nativeçæ ¸å¿ç»ä»¶ç»æJSå±çåºæ¬ç»ä»¶åç»æä¸å¡ç«¯çä¸å¡ç»ä»¶ï¼åºè¯¥æ¯éç¨facebook/css-layout · GitHubçCè¯è¨çæ¬å®ç°çï¼å¨pptä¸æ们çå°äºç±»ä¼¼flex-direction: columnä¸ç±»ç代ç ï¼è¿ä¸ªæ£æ¯css-layoutæ¯æçè¯æ³ï¼ã
4. å¨React Nativeä¸ï¼åJSçå·¥ç¨å¸è§£å³çæ¯ãå°åºæ¬ç»ä»¶æ¼è£ æå¯ç¨çReactç»ä»¶ãçé®é¢ï¼åNative Codeçå·¥ç¨å¸è§£å³çæ¯ãæä¾æ ¸å¿ç»ä»¶ï¼æä¾è¶³å¤çæ©å±æ§ãçµæ´»æ§åæ§è½ãçé®é¢ã
React Nativeç设计èèï¼
ReactJS对React Nativeæçç´æ¥çå½±åï¼æ没å¨ç产ç¯å¢ä¸ç¨è¿Reactï¼åªçè¿ä»£ç &ç¨è¿Angularï¼å¦ææ误请æåºï¼
ReactJSéé¢æè¿æ ·ç设计ï¼
1. ReactJS ç大工åå ¥å£createElementè¿åçä¸æ¯æ个å®ä½DOM对象ï¼èåªæ¯ä¸ä¸ªæ°ç»
2. éè¿æºç ä¸ ui/browser/ ç®å½ä¸ç代ç ï¼å°è¿ä¸ªæ°ç»è½¬æ¢æDOM
3. åºå±ç渲ææ ¸å¿æ¯å¯ä»¥æ´æ¢ç
å¦å¤ï¼Facebookèªå·±æJSXï¼css-layoutçå¼æºé¡¹ç®ï¼åºäºè¿äºï¼å¦æè¦åä¸ä¸ªç¨ JSæ¥å¼åNative appçä¸è¥¿ï¼å¾èªç¶å°±æ³å°äºä¸å¥æææççææ³ï¼
1. å° ui/browser éé¢ç代ç æ¿æ¢æä¸å¥ Native çæ¡¥æ¥JSï¼å®é ä¸ï¼iOSçæ¯éè¿
injectGenericComponentClassæ¹æ³ï¼å°æ ¸å¿ç»ä»¶çæ¹æ³æ³¨å ¥å°JSéé¢ ï¼ï¼å°±ç´æ¥å¤ç¨ReactçMVVMï¼èªå¨å°æ°æ®æ å°å°Nativeäº
2. Native codeéé¢å®ç°ä¸ç»æ ¸å¿APIï¼ä¸ç»æä¾æ ¸å¿ç»ä»¶çAPIï¼createãupdateãdeleteï¼ï¼ä¸ç»äºä»¶æ¹æ³ï¼ReactJSéé¢çEventEmitter ï¼ï¼ä¸ç»å¯¹cssè¿è¡è§£æï¼css-layoutï¼ä»¥åè¿åStyleçComputedStyleï¼React Nativeéé¢å«meatureStyleï¼ã
è¿æ ·ï¼ç¨ä¸äºReactJSæ¬èº«çæææ ¸å¿åè½å设计æè·¯ï¼Nativeçå¼åä¹è¶³å¤ç®åã
é£ï¼React Nativeæ¯ä»ä¹ï¼
å ¶å®è¿ä¸è¥¿ä»Nativeå¼åæ¥è¯´ï¼ç¸å½äºéæ°åæäºä¸ä¸ªæµè§å¨æ¸²æå¼æ并ä¸å¥ä¸ä¸ªReactç壳ï¼ä»Webå¼åè§åº¦æ¥è¯´ï¼å°±æ¯æåæ¥Reactçå端æ¢æäºNative codeæ¥å®ç°ï¼å°±è·Flipboardæè¿æçReact Canvas ä¸æ ·ï¼ Flipboard · GitHubreact-canvas
React Nativeçä¼å¿åå£å¿ï¼ï¼
ä¼å¿ç¸å¯¹Hybird appæè Webappï¼
1. ä¸ç¨Webviewï¼å½»åºæè±äºWebview让人ä¸ç½ç交äºåæ§è½é®é¢
2. æè¾å¼ºçæ©å±æ§ï¼è¿æ¯å 为Native端æä¾çæ¯åºæ¬æ§ä»¶ï¼JSå¯ä»¥èªç±ç»å使ç¨
3. å¯ä»¥ç´æ¥ä½¿ç¨Nativeåççãçé¼ãå¨ç»ï¼å¨FB Groupè¿ä¸ªappéé¢ï¼é¢æ¿æ»åºå¸¦ä¸ç¹æå»å¼¹å¨ï¼é¢æ¿åºäºæ个ç¹å±å¼è¿ç§å¨ç»éå¤å¯è§ï¼è¿ç§å¨ç»ç¨Native codeæ¥åå°èä¸ç¢ï¼ä½æ¯ç¨Webæ¥åå°±é¾ä¸å é¾ï¼ã
ä¼å¿ç¸å¯¹äºNative appï¼
1. å¯ä»¥éè¿æ´æ°è¿ç«¯JSï¼ç´æ¥æ´æ°appï¼ä¸è¿è¿å¿«æ为å家大åNative appçæ é äºâ¦
å£å¿ï¼
1. æ©å±æ§ä»ç¶è¿è¿ä¸å¦webï¼ä¹è¿è¿ä¸å¦ç´æ¥åNative codeï¼è¿ä¸ªä¸ç¨åºè¯è§£éäºå§ï¼
2. ä»Nativeå°Webï¼è¦åå¾å¤æ¦å¿µè½¬æ¢ï¼å¿å¿ é æåæ¹é½è¦å¦¥åãæ¯å¦webè¦ç¨ä¸å¥CSSçéå²çï¼Nativeéè¿css-layoutæ¿å°æç»æ ·å¼å转æ¢ænativeåçç表达æ¹å¼ï¼æ¯å¦iOSçConstraint\origin\Centerçå±æ§ï¼ï¼åæ¯å¦å¨ç»ãå¦å¤ï¼è¥AndroidåiOSé½è¦åç¸åçå°è£ ï¼æ¦å¿µè½¬æ¢å°±æ´å¤æäºã
æ´æ°1ï¼æ·»å äºReact对React Nativeçå½±åã
æ´æ°2ï¼åºæ¬ç¡®å®å ¶ä½¿ç¨äº css-layoutï¼æ·»å äºå¯¹React Nativeçæ»ç»
æ´æ°3: React nativeå·²ç»å¼æºäºï¼ React Nativeï¼åªæiOSçãæåäºå 个demoï¼ç®åçäºçobjc代ç 并åå¼æºåçæ们çä¸äºç»è®ºï¼è§åæï¼äº¤åéªè¯ãç®åå°ä»å端工ç¨å¸åç³»ç»æ´ä½è§åº¦è¯´ä¸ä¸React nativeçç¹ç¹åä¼å£å§ã
æ´æ°4: è¡¥å äºå æ¡ä¼å¿åä¸å端å¼åçå¯¹ç §
å¦ä½ä½¿ç¨oprofile对软件åprofiling
ããä¸. Oprofileç®ä»
ãã
ããProfilingæ¯å¯¹ä¸åæ§è½ç¹å¾çæ°æ®çå½¢å¼åæ»ç»æåæï¼å®é常以å¾å½¢å表çå½¢å¼åºç°ãå®æä¾ä¸ºç¹å®çå¤çå¨äºä»¶æ¶éçéæ ·ç¾åæ°ææ°éï¼æ¯å¦cache miss rateãTLB miss rateççãä¸è¬æ¥è¯´ï¼ä¸»è¦ç®çæ¯ä¸ºäºæ¾åºè½¯ä»¶ä¸çæ§è½ç¶é¢ï¼ç¶åæé对æ§çä¼å以æå软件çæ´ä½æ§è½ã
ãã
ããOprofile æ¯ç¨äº Linux çè¥å¹²ç§è¯æµåæ§è½çæ§å·¥å ·ä¸çä¸ç§ãå®å¯ä»¥å·¥ä½å¨ä¸åçä½ç³»ç»æä¸ï¼å æ¬ARM, PowerPC, MIPS, IA, IA å AMD Athlonççãå®çå¼éå¾å°ï¼ä»Linux 2.6 çèµ·ï¼å®è¢«å å«è¿äºLinuxå æ ¸ä¸ã
ãã
ããOprofileå¯ä»¥æ¶éæå ³å¤çå¨äºä»¶çä¿¡æ¯ï¼å¸®å©ç¨æ·è¯å«è¯¸å¦å¾ªç¯çå±å¼ãcacheç使ç¨çä½ãä½æçç±»å转æ¢ååä½æä½ãé误é¢æµè½¬ç§»çé®é¢ãOprofileæ¯ä¸ç§ç»ç²åº¦çå·¥å ·ï¼å¯ä»¥ä¸ºæ令éæè 为å½æ°ãç³»ç»è°ç¨æä¸æå¤çä¾ç¨æ¶ééæ ·ãOprofile éè¿åæ ·æ¥å·¥ä½ã使ç¨æ¶éå°çè¯æµæ°æ®ï¼ç¨æ·å¯ä»¥å¾å®¹æå°æ¾åºæ§è½é®é¢ã
ãã
ããéè¿çå¯CPUçhardware eventsï¼oprofileå¯ä»¥å¨è¿è¡ç¶æä¸å¯¹æ´ä¸ªLinuxç³»ç»è¿è¡profilingãProfilingç对象å¯ä»¥æ¯Linux kernel (å æ¬modulesåinterrupt handlers), shared librariesæè åºç¨ç¨åºã
ãã
ããä»0.9.8çæ¬å¼å§ï¼oprofileæ¯æPerf_events profiling mode模å¼ãåºç¨ç¨åºoperf被ç¨æ¥æ§å¶profilingè¿ç¨ï¼èå¨legacy modeä¸ï¼æ¯éè¿opcontrolèæ¬åoprofiled daemonæ¥å®æçãOperfä¸å象legacy modeé£æ ·éè¦OProfile kernel driverï¼å®ç´æ¥åLinux Kernel Performance Events Subsystemæ交éã使ç¨operfï¼å°±å¯ä»¥ç¨æ®éç¨æ·ç身份æ¥profilingç¨æ·çåºç¨ç¨åºäºï¼å½ç¶å¦æéè¦å¯¹æ´ä¸ªç³»ç»æ¥profilingçæ¶åè¿æ¯éè¦rootæéçã
ãã
ããå¦æ硬件ä¸æ¯æOProfile使ç¨performance countersï¼OProfileå°±åªè½å·¥ä½å¨Timer Modeä¸äºãTimer Modeåªè½å¨legacy profiling modeä¸ä½¿ç¨ï¼å³åªè½éè¿opcontrolèæ¬æ¥æ§å¶ã
ããOprofileçä¼å¿ï¼
ã㟠æ¯è¾ä½çè¿è¡å¼é
ã㟠对被profilingç对象影åå¾å°
ã㟠å¯ä»¥profilingä¸ææå¡ç¨åº(interrupt handlers)
ã㟠å¯ä»¥profilingåºç¨ç¨åºåshared libraries
ã㟠å¯ä»¥profiling dynamically compiled (JIT) code
ã㟠å¯ä»¥å¯¹æ´ä¸ªç³»ç»åprofiling
ã㟠å¯ä»¥è§å¯CPUå é¨çç»èï¼ä¾å¦cache miss rate
ã㟠å¯ä»¥å¤æºä»£ç åannotation
ã㟠å¯ä»¥æ¯æinstruction-levelçprofiling
ã㟠å¯ä»¥çæcall-graph profiles
ãã
ããä¸è¿OProfileä¹ä¸æ¯ä¸è½çï¼å®ä¹æèªå·±çå±éæ§ï¼
ã㟠åªè½å¨x, ARM, åPowerPCæ¶æä¸çæcall graph profiles
ã㟠ä¸æ¯æ%精确çinstruction-level profiling
ã㟠对dynamically compiled (JIT) code profilingçæ¯æè¿ä¸å®åã
ãã
ããæ 论å¦ä½ï¼Oprofileçåè½é½æ¯gprofè¦å¼ºå¾å¤ï¼ä»£ä»·æ¯é 置起æ¥ä¼æ¯è¾éº»ç¦ã
ãã
ãã
ããäº. ç¼è¯Oprofile
ãã
ããé¦å æ好å¨Linux kerneléé¢éä¸Oprofile driverï¼ä»¥è·å¾å ¨é¢çæ¯æã
ãã
ã
ããå 为ç¬è 使ç¨çæ¯Xilinx Linux pre-built .7ï¼æ以è¿éä¸è½½çæ¯linux-xlnx-xilinx-v.7.tar.gz
ãã
ãã解å缩åï¼ç¨ä»¥ä¸å½ä»¤è°åºLinux kernelçé ç½®çé¢ï¼
ããexport ARCH=arm
ããexport CROSS_COMPILE=arm-xilinx-linux-gnueabi-
ããmake xilinx_zynq_defconfig
ããmake xconfig æè make menuconfig
ãã
ããå¨é ç½®çé¢ä¸å°ä»¥ä¸ä¸¤é¡¹å¾ä¸ï¼
ããGeneral setup --->
ãã[*] Profiling support
ãã<*> OProfile system profiling
ãã
ããç¶åmake uImageå³å¯çææ°çuImageï¼ç¨æ¥æ¿æ¢Xilinx Linux pre-built .7ä¸çLinux kernel imageãåæ¶æ们ä¹éè¦vmlinuxæ¥æ£æ¥profilingçç»æã
ãã
ãã
ããOprofileéè¦popt, bfd, libertyåºï¼è¦å¨åµå ¥å¼åæ¿ä¸ä½¿ç¨è¿äºåºï¼éè¦æå·¥å®æ交åç¼è¯ã
ãã
ããé对popt 1.7ï¼ç¨ä»¥ä¸å½ä»¤å®æç¼è¯ï¼
ãã./configure --prefix=/home/wave/xilinx/oprofileprj/rootfs --host=arm-xilinx-linux-gnueabi --with-kernel-support --disable-nls && make && make install
ãã
ããé对binutils 2.ï¼ç¨ä»¥ä¸å½ä»¤å®æç¼è¯ï¼
ãã./configure --host=arm-xilinx-linux-gnueabi --prefix=/home/wave/xilinx/oprofileprj/rootfs --enable-install-libbfd --enable-install-libiberty --enable-shared && make && make install
ããä¸è¿--enable-install-libiberty没æææï¼æ以éè¦æå·¥ælibiberty.aålibiberty.hæ·è´å°ç¸åºçä½ç½®ã
ãã
ããé对oprofile 0.9.9ï¼ç¨ä»¥ä¸å½ä»¤å®æç¼è¯ï¼
ãã./configure --host=arm-xilinx-linux-gnueabi --prefix=/home/wave/xilinx/oprofileprj/rootfs --with-kernel-support --with-binutils=/home/wave/xilinx/oprofileprj/rootfs && make && make install
ããé ç½®è¿ç¨ç»æåå¯è½ä¼æ以ä¸æ示ï¼å 为没ææç®ç¨GUIåprofile JITed codeï¼æ以ç´æ¥å¿½è§ä¹ã
ããconfig.status: executing libtool commands
ããWarning: QT version 3 was requested but not found. No GUI will be built.
ããWarning: The user account 'oprofile:oprofile' does not exist on the system.
ããTo profile JITed code, this special user account must exist.
ããPlease ask your system administrator to add the following user and group:
ããuser name : 'oprofile'
ããgroup name: 'oprofile'
ããThe 'oprofile' group must be the default group for the 'oprofile' user.
ãã
ããå°ç¼è¯å®æçuImageï¼vmlinuxï¼oprofile binaryï¼éæ°ç¼è¯ç没æ-pgçlibjpeg binary以åtool chainçlibcæå æ¾å°SDå¡ä¸ï¼åå¤å¨ZCå¼åæ¿ä¸å°è¯profile djpegã
ãã
ããä¸. è¿è¡Oprofile
ãã
ããæ£å¸¸å¯å¨åµå ¥å¼Linuxåï¼å¨å¼åæ¿çconsoleä¸ä¸æ¬¡è¾å ¥ä»¥ä¸å½ä»¤ï¼
ãã
ããmount /dev/mmcblk0p1 /mnt
ãã
ããmkdir -p /home/root/work
ããcd /home/root/work
ããtar zxvf /mnt/jpeg-bin-nopg.tar.gz
ããcd jpeg-bin/bin
ããcp /mnt/park-x.jpg .
ããexport LD_LIBRARY_PATH=/home/root/work/jpeg-bin/lib
ãã
ããcd /home/root/work
ããtar zxvf /mnt/rootfs.tar.gz
ããcd rootfs
ããchown root:root -R
*ããcp -R bin/* /usr/bin
ããcp -R lib/* /lib
ããcp /bin/which /usr/bin
ããcp /bin/dirname /usr/bin
ããmkdir -p /home/wave/xilinx/oprofileprj/rootfs/share
ããcp -R ./rootfs/* /home/wave/xilinx/oprofileprj/rootfs
ãã
ããcd /home/root/work
ããtar zxvf /mnt/libc.tar.gz
ããcp ./lib/libstdc*.* /lib
ãã
ããmkdir -p /home/wave/xilinx/libjpeg
ããcd /home/wave/xilinx/libjpeg
ããtar zxvf /mnt/jpeg-9.tar.gz
ãã
ããcp /mnt/vmlinux /home/root/work
ãã
ããcd /home/root/work/jpeg-bin/bin
ãã
ããopcontrol --init
ããopcontrol --vmlinux=/home/root/work/vmlinux
ããopcontrol --setup --event=CPU_CYCLES:::0:1 --session-dir=/home/root/
ãã
ããoperf --vmlinux /home/root/work/vmlinux ./djpeg -bmp park-x.jpg > result.bmp
ããopreport -l ./djpeg
ãã
ããå®æè¿ä¸æ¥åï¼æ们就å¯ä»¥çå°profilingçç»æäºï¼å¨ç¬è çå¹³å°ä¸çå°çå 容ç主è¦é¨åå¦ä¸ï¼
ããroot@zynq:~/work/jpeg-bin/bin# opreport -l ./djpeg
ããUsing /home/root/work/jpeg-bin/bin/oprofile_data/samples/ for samples directory.
ããCPU: ARM Cortex-A9, speed MHz (estimated)
ããCounted CPU_CYCLES events (CPU cycle) with a unit mask of 0x (No unit mask) count
ããsamples % image name symbol name
ãã . libc-2..so /lib/libc-2..so
ãã
2G内存环境下MySQL编译安装全攻略2g内存编译mysql
2G内存环境下MySQL编译安装全攻略
MySQL是全球最流行的开源数据库,因其高性能、稳定性和可扩展性被广泛应用于各种应用场景。虽然官方提供了针对各种操作系统和架构的官方二进制包,但许多人更愿意通过编译源代码来获得更多的自定义和优化。本文将介绍在2G内存环境下编译安装MySQL的全过程。
第一步:准备工作
在开始编译MySQL之前,需要确保系统已经安装了必要的依赖库和工具。以下是几个常用的依赖库和工具:
1. gcc
gcc是GNU的C语言编译器,是Linux系统下的标准编译工具,任何高级编程语言都需要通过gcc编译器进行编译。安装gcc的命令如下:
yum install gcc
2. CMake
CMake是一个跨平台的自动化构建工具,可以生成各种工程文件,如Makefile、Visual Studio等。安装CMake的命令如下:
yum install cmake
3. ncurses
ncurses是一个开源的、可移植和API一致的终端屏幕控制库。许多Linux上的终端工具都需要ncurses库的支持。安装ncurses的命令如下:
yum install ncurses-devel
4. bison
bison是一款生成编译器的自由软件,常被用来生成语法解析器。MySQL使用bison生成语法解析器,安装bison的命令如下:
yum install bison
5. openssl
OpenSSL是一个开源的安全套接字层(Secure Sockets Layer)和传输层安全(Transport Layer Security)协议的开发库。MySQL在安装时需要使用openssl,可以通过以下命令安装:
yum install openssl-devel
第二步:下载MySQL源码
访问MySQL官网,下载源码包。本文以5.7.版本为例:
wget //Downloads/MySQL-5.7/mysql-5.7..tar.gz
下载完成后,将源码包解压到目录中:
tar zxvf mysql-5.7..tar.gz
第三步:配置编译选项
进入MySQL源码目录,执行以下命令进行编译选项配置:
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DWITH_BOOST=boost \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_SSL=system \
-DENABLED_LOCAL_INFILE=1
其中,各选项含义如下:
1. CMAKE_INSTALL_PREFIX
MySQL的安装目录,默认安装到/usr/local/mysql目录下。
2. MYSQL_DATADIR
MySQL的数据目录,默认安装到/usr/local/mysql/data目录下。
3. MYSQL_UNIX_ADDR
MySQL的UNIX Domn Socket地址,默认安装到/usr/local/mysql/mysql.sock。
4. WITH_BOOST
启用BOOST库加速编译速度。
5. WITH_*_STORAGE_ENGINE
启用各种存储引擎。
6. WITH_DEBUG
开启调试模式。
7. WITH_SSL
启用SSL加密。
8. ENABLED_LOCAL_INFILE
启用从本地加载数据。
第四步:编译安装MySQL
执行以下命令进行编译和安装:
make && make install
编译完成后,会将MySQL二进制文件和支持文件安装到/usr/local/mysql目录下。
第五步:启动MySQL
执行以下命令启动MySQL:
/usr/local/mysql/bin/mysqld_safe –user=mysql &
等待片刻后,可以尝试连接到MySQL服务器:
/usr/local/mysql/bin/mysql -u root -p
输入密码,如果能够成功登录,则表示MySQL编译安装已经完成。
总结
本文介绍了在2G内存环境下编译安装MySQL的全过程,需要注意的是,在低内存环境下编译MySQL需要确保操作系统配置合理,否则可能会因为系统资源不足而导致编译失败。在实际生产环境中,建议使用高配置的服务器或者使用现成的MySQL二进制包。