[20180308]測試ARG_MAX引數.txt

lfree發表於2018-03-08

[20180308]測試ARG_MAX引數.txt

--//上個星期遇到的問題,提到ARG_MAX 引數,可以透過$ getconf ARG_MAX 獲得.連結
--//http://blog.itpub.net/267265/viewspace-2151445/

--//今天測試看看手工結果如何?

1.環境:
$  cat /etc/issue
CentOS release 6.2 (Final)
Kernel \r on an \m

$  cat /proc/version
Linux version 2.6.32-220.el6.x86_64 (mockbuild@c6b18n3.bsys.dev.centos.org) (gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) ) #1 SMP Tue Dec 6 19:48:22 GMT 2011

$  getconf ARG_MAX
2621440

--//2621440/1024 = 2560
--//這臺機器2.5M.奇怪.

--//多數釋出版本都是
$ getconf ARG_MAX
131072
--//131072/1024 = 128K

2.手工測試:
$ cd /u01/app/oracle/admin/orcl/adump

$  time ls -1 | xargs  echo > /tmp/aa.txt

real    0m0.108s
user    0m0.087s
sys     0m0.024s

$  cat /tmp/aa.txt | tr ' ' '_'  |awk '{print length($0)}'
131062
91811

--//第1行佔用131062位元組.說明一些程式xargs接收按照128K.換1種方式:

$  find . -name "*.aud" |  xargs echo > /tmp/ab.txt
$  cat /tmp/ab.txt | tr ' ' '_'  |awk '{print length($0)}'
131060
124379

--//基本很接近.

3.既然知道命令列快取,xargs支援-P引數,
-P max-procs
Run  up to max-procs processes at a time; the default is 1.  If max-procs is 0, xargs will run as many processes as
possible at a time.  Use the -n option with -P; otherwise chances are that only one exec will be done.

--//如果這樣-P 僅僅支援2個程式,上面的輸出才2行.-s可以改變接收快取大小.
--//我的測試機器cpu(邏輯)=24個.

$  ls -1 |wc
  16283   16283  222875

--//222875/24 = 9286.

$  time find . -name "*.aud" | xargs -s 9400  -P 24  file > /dev/null
real    0m1.288s
user    0m23.277s
sys     0m0.277s

--//這樣real僅僅1秒.奇怪user=23秒.

$  time find . -name "*.aud" | xargs   file > /dev/null
real    0m9.171s
user    0m9.057s
sys     0m0.132s

--//明顯第1種方式快許多.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2151632/,如需轉載,請註明出處,否則將追究法律責任。

相關文章