Путем увеличения числа шпинделей в SAN можно увеличить производительность.
Я не знаю, где математика там, но каждый диск имеет определенное число IOPS, который это может выполнить. Путем добавления большего количества дисков к массиву хранения данных Вы получаете кумулятивный эффект, увеличивающий общий IOPS SAN.
Если можно переполнить больше дисков в единственное 2-3U устройство, можно начать видеть IOPS на увеличение Единицы высоты монтируемого в стойку устройства.
Мне сказали, что можно победить (в производительности) Дисковый массив Волоконно-оптического канала с дисками SATA, если шпиндельное количество является путем в пользу дисков SATA.
XioTech использует дисковый метод виртуализации, который удостоверяется, что Ваши LUNS распространены через каждый шпиндель в массиве, таким образом, они все работают на Вас. Некоторые БЕЗ могут использовать всего несколько дисков в массиве для определенного LUN, и Вы не будете видеть увеличение производительности, возможное при помощи всех дисков сразу.
(Я провел много часов с XioTech specing SAN для крупной Больницы, и это некоторые понятия, я взял разговор с их инженерами.)
Keith
Интерфейс командной строки AWS теперь поддерживает параметр - query
, который принимает выражения JMESPath .
Это означает, что вы можете суммировать значения размеров, указанные в list-объекты
с использованием суммы (Contents []. Size)
и подсчета как length (Contents [])
.
Это можно запустить с помощью официального интерфейса командной строки AWS, как показано ниже и был представлен в феврале 2014 г.
aws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[].Size), length(Contents[])]"
Если Вы хотите получить размер от Консоли AWS:
Metrics По умолчанию, необходимо видеть Метрика устройства хранения данных из блока
Так посылая сообщение-розыгрыш вокруг через API и играя некоторые те же запросы, S3 произведет все содержание блока в одном запросе, и он не должен убывать в каталоги. Результаты, затем просто требующие суммирующий через различные элементы XML и не повторенные вызовы. У меня нет демонстрационного блока, который имеет тысячи объектов, таким образом, я не знаю, как хорошо он масштабируется, но это кажется довольно простым.
... Немного поздно, но, лучший способ, которым я нашел, при помощи отчетов на портале AWS. Я сделал класс PHP для загрузки и парсинга отчетов. С ним можно получить общее количество объектов для каждого блока, общий размер в часы ГБ или байта и т.д.
Проверьте его и сообщите мне, было ли полезно
Я использовал S3 REST/Curl API, перечисленный ранее в этом потоке, и сделал это:
<?php
if (!class_exists('S3')) require_once 'S3.php';
// Instantiate the class
$s3 = new S3('accessKeyId', 'secretAccessKey');
S3::$useSSL = false;
// List your buckets:
echo "S3::listBuckets(): ";
echo '<pre>' . print_r($s3->listBuckets(), 1). '</pre>';
$totalSize = 0;
$objects = $s3->getBucket('name-of-your-bucket');
foreach ($objects as $name => $val) {
// If you want to get the size of a particular directory, you can do
// only that.
// if (strpos($name, 'directory/sub-directory') !== false)
$totalSize += $val['size'];
}
echo ($totalSize / 1024 / 1024 / 1024) . ' GB';
?>
Я написал сценарий Bash, s3-du.sh, который будет перечислять файлы в корзине с s3ls и печатать количество файлов и размеры, такие как
s3-du.sh testbucket.jonzobrist.com
149 files in bucket testbucket.jonzobrist.com
11760850920 B
11485205 KB
11216 MB
10 GB
Полный сценарий:
#!/bin/bash
if [ “${1}” ]
then
NUM=0
COUNT=0
for N in `s3ls ${1} | awk ‘{print $11}’ | grep [0-9]`
do
NUM=`expr $NUM + $N`
((COUNT++))
done
KB=`expr ${NUM} / 1024`
MB=`expr ${NUM} / 1048576`
GB=`expr ${NUM} / 1073741824`
echo “${COUNT} files in bucket ${1}”
echo “${NUM} B”
echo “${KB} KB”
echo “${MB} MB”
echo “${GB} GB”
else
echo “Usage : ${0} s3-bucket”
exit 1
fi
Он делает do размер подкаталога, так как Amazon возвращает имя каталога и размер всего его содержимого.
Также Hanzo S3 Tools делает это. После установки вы можете:
s3ls -s -H bucketname
Но я считаю, что это также суммируется на стороне клиента и не извлекается через API AWS.
Если вы загрузите отчет об использовании , вы можете построить график ежедневных значений для поля TimedStorage-ByteHrs
.
Если вам нужно это число в ГиБ, просто разделите на 1024 * 1024 * 1024 * 24
(это ГиБ-часы для 24-часового цикла). Если вам нужно число в байтах, просто разделите на 24 и выйдите на график.
Привет, есть инструмент поиска метданных для AWS S3 по адресу https://s3search.p3-labs.com/ . Этот инструмент дает статистику об объектах в корзине с поиск по метаданным.
By Cloudberry program is also possible to list the size of the bucket, amount of folders and total files, clicking "properties" right on top of the bucket.
s4cmd - это самый быстрый способ, который я нашел (утилита командной строки, написанная на Python):
pip install s4cmd
Теперь, чтобы вычислить весь размер корзины с использованием нескольких потоков:
s4cmd du -r s3://bucket-name
Следующий способ использует AWS PHP SDK для получения общего размера сегмента.
// make sure that you are using correct region (where the bucket is) to get new Amazon S3 client
$client = \Aws\S3\S3Client::factory(array('region' => $region));
// check if bucket exists
if (!$client->doesBucketExist($bucket, $accept403 = true)) {
return false;
}
// get bucket objects
$objects = $client->getBucket(array('Bucket' => $bucket));
$total_size_bytes = 0;
$contents = $objects['Contents'];
// iterate through all contents to get total size
foreach ($contents as $key => $value) {
$total_bytes += $value['Size'];
}
$total_size_gb = $total_size_bytes / 1024 / 1024 / 1024;
Я знаю, что это старый вопрос, но вот пример PowerShell:
Get-S3Object -BucketName
$ A
содержит размер корзины, и есть параметр имени ключа, если вам просто нужен размер определенной папки в корзине.
Использование официальных инструментов командной строки AWS s3:
aws s3 ls s3://bucket/folder --recursive | awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'
Это лучшая команда, просто добавьте следующие 3 параметра - резюмируйте --человечески читаемый --recursive
после aws s3 ls
. - суммировать
не требуется, хотя дает приятный штрих к общему размеру.
aws s3 ls s3://bucket/folder --summarize --human-readable --recursive
Я рекомендую использовать отчет об использовании S3 для больших сегментов , см. my How To о том, как его получить. Обычно вам нужно загрузить отчет об использовании службы S3 за последний день с Timed Storage - Byte Hrs и проанализировать его, чтобы узнать использование диска.
cat report.csv | awk -F, '{printf "%.2f GB %s %s \n", $7/(1024**3 )/24, $4, $2}' | sort -n
Для действительно низкотехнологичного подхода: используйте клиент S3, который может рассчитать размер за вас. Я использую Panic's Transmit, нажимаю на ведро, делаю «Получить информацию» и нажимаю кнопку «Рассчитать». Я не уверен, насколько он быстр или точен по сравнению с другими методами, но, похоже, возвращает тот размер, который я ожидал.
По состоянию на 28 июля 2015 года вы можете получить эту информацию через CloudWatch . Если вам нужен графический интерфейс, перейдите в консоль CloudWatch : (Выберите Регион>) Метрики> S3
Это намного быстрее, чем некоторые другие команды, размещенные здесь, так как он не запрашивает размер каждого файла в отдельности для вычисления суммы.
aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2015-07-15T10:00:00 --end-time 2015-07-31T01:00:00 --period 86400 --statistics Average --region eu-west-1 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=toukakoukan.com Name=StorageType,Value=StandardStorage
Важно : Вы должны указать StorageType и BucketName в аргументе измерений, иначе вы не получите результатов. Все, что вам нужно изменить, это - дата начала
, - время окончания
и Value = toukakoukan.com
.
Вот вам вздор сценарий, который можно использовать, чтобы не указывать - дату начала
и - время окончания
вручную.
#!/bin/bash
bucket=$1
region=$2
now=$(date +%s)
aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time "$(echo "$now - 86400" | bc)" --end-time "$now" --period 86400 --statistics Average --region $region --metric-name BucketSizeBytes --dimensions Name=BucketName,Value="$bucket" Name=StorageType,Value=StandardStorage
Теперь это можно сделать тривиально с помощью только официального клиента командной строки AWS:
aws s3 ls --summarize --human-readable --recursive s3://bucket-name/
Это также принимает префиксы пути, если вы не хотите подсчитывать всю корзину:
aws s3 ls --summarize --human-readable --recursive s3://bucket-name/directory
В документации AWS рассказывается, как это сделать:
aws s3 ls s3://bucketnanme --recursive --human-readable --summarize
Это результат, который вы получите:
2016-05-17 00:28:14 0 Bytes folder/
2016-05-17 00:30:57 4.7 KiB folder/file.jpg
2016-05-17 00:31:00 108.9 KiB folder/file.png
2016-05-17 00:31:03 43.2 KiB folder/file.jpg
2016-05-17 00:31:08 158.6 KiB folder/file.jpg
2016-05-17 00:31:12 70.6 KiB folder/file.png
2016-05-17 00:43:50 64.1 KiB folder/folder/folder/folder/file.jpg
Total Objects: 7
Total Size: 450.1 KiB
Поскольку ответов так много, я решил, что попробую свой собственный. Я написал свою реализацию на C # с помощью LINQPad. Скопируйте, вставьте и введите ключ доступа, секретный ключ, конечную точку региона и имя сегмента, который вы хотите запросить. Кроме того, не забудьте добавить пакет AWSSDK nuget.
При тестировании одного из моих сегментов он дал мне количество 128075 и размер 70,6 ГБ. Я знаю, что точность 99,9999%, так что у меня хороший результат.
void Main() {
var s3Client = new AmazonS3Client("accessKey", "secretKey", RegionEndpoint.???);
var stop = false;
var objectsCount = 0;
var objectsSize = 0L;
var nextMarker = string.Empty;
while (!stop) {
var response = s3Client.ListObjects(new ListObjectsRequest {
BucketName = "",
Marker = nextMarker
});
objectsCount += response.S3Objects.Count;
objectsSize += response.S3Objects.Sum(
o =>
o.Size);
nextMarker = response.NextMarker;
stop = response.S3Objects.Count < 1000;
}
new {
Count = objectsCount,
Size = objectsSize.BytesToString()
}.Dump();
}
static class Int64Extensions {
public static string BytesToString(
this long byteCount) {
if (byteCount == 0) {
return "0B";
}
var suffix = new string[] { "B", "KB", "MB", "GB", "TB", "PB", "EB" };
var longBytes = Math.Abs(byteCount);
var place = Convert.ToInt32(Math.Floor(Math.Log(longBytes, 1024)));
var number = Math.Round(longBytes / Math.Pow(1024, place), 1);
return string.Format("{0}{1}", Math.Sign(byteCount) * number, suffix[place]);
}
}
Чтобы проверить размер всех сегментов, попробуйте этот сценарий bash
s3list=`aws s3 ls | awk '{print $3}'`
for s3dir in $s3list
do
echo $s3dir
aws s3 ls "s3://$s3dir" --recursive --human-readable --summarize | grep "Total Size"
done
Вы можете использовать s3cmd
:
s3cmd du s3://Mybucket -H
или
s3cmd du s3://Mybucket --human-readable
Он дает общее объекты и размер ведра в очень удобочитаемой форме.
Это работает на меня...
aws s3 ls s3://bucket/folder/ --recursive | awk '{sz+=$3} END {print sz/1024/1024 "MB"}'
CloudWatch теперь имеет панель мониторинга службы S3 по умолчанию, которая отображает ее в виде графика «Средний размер сегмента в байтах». Я думаю эта ссылка будет работать для всех, кто уже вошел в консоль AWS: